Форум программистов, компьютерный форум CyberForum.ru

Не работает остановка потока! - Android

Восстановить пароль Регистрация
 
Serg_123
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 19
04.06.2016, 20:08     Не работает остановка потока! #1
Помогите пожалуйста! Укажите на ошибку! Почему не останавливается поток????
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
public class FoneService extends Service {
    // ИМЯ СЕРВЕРА (url зарегистрированного нами сайта)
    // например [url]http://l29340eb.bget.ru[/url]
 
 
    String server_name = "http://46.59.45.14/gates";    
 
    HttpURLConnection conn;
    Thread thr;
    String my_var, id_visova, nom_tel, flag_lgota,  cod_car;
 
//    Integer id_visova;
 
 
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void onStart(Intent intent, int startId) {
 
        Log.i("chat", "+ FoneService - запуск сервиса");
 
        // создадим и покажем notification
        // это позволит стать сервису "бессмертным"
        // и будет визуально видно в трее
//        Intent iN = new Intent(getApplicationContext(), MainActivity.class);
        Intent iN = new Intent();
        cod_car = intent.getStringExtra("cod_car");
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pI = PendingIntent.getActivity(getApplicationContext(),
                0, iN, PendingIntent.FLAG_CANCEL_CURRENT);
        Notification.Builder bI = new Notification.Builder(
                getApplicationContext());
        bI.setContentIntent(pI)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setContentTitle(getResources().getString(R.string.fon_msg))
                .setContentText("Работаю...");
        Notification notification = bI.build();
        startForeground(101, notification);
 
        startLoop();
        Log.i("chat",
                "+ FoneService --------------- после startloop " );
 
    }
    @Override
    public void     onDestroy (){
 
        thr.interrupt();
 
    }
 
 
 
    // запуск потока, внутри которого будет происходить
    // регулярное соединение с сервером для чтения новых
    // сообщений.
    // если сообщения найдены - отправим броадкаст для обновления
 
 
    private void startLoop() {
 
        thr = new Thread(new Runnable() {
 
            // ansver = ответ на запрос
            // lnk = линк с параметрами
            // my_var = моя переменная
            String ansver, lnk;
            @Override
            public void run() {
//                while (!thr.isInterrupted()) {
                while  (!Thread.currentThread().isInterrupted()) {
                    System.out.println("Привет из потока " + Thread.currentThread().getName());
//                while (true) { // стартуем бесконечный цикл
 
                    // создаем соединение ---------------------------------->
                    try {
                        lnk = server_name + "/chat.php?action=select&car="
                                + URLEncoder.encode(cod_car, "UTF-8");
                        Log.i("chat",
                                "+ FoneService --------------- ОТКРОЕМ СОЕДИНЕНИЕ "+cod_car);
 
                        conn = (HttpURLConnection) new URL(lnk)
                                .openConnection();
                        conn.setReadTimeout(10000);
                        conn.setConnectTimeout(15000);
                        conn.setRequestMethod("POST");
                        conn.setRequestProperty("User-Agent", "Mozilla/5.0");
                        conn.setDoInput(true);
                        conn.connect();
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    }
                    // получаем ответ ---------------------------------->
                    try {
                        InputStream is = conn.getInputStream();
                        BufferedReader br = new BufferedReader(
                                new InputStreamReader(is, "UTF-8"));
                        StringBuilder sb = new StringBuilder();
                        String bfr_st = null;
                        while ((bfr_st = br.readLine()) != null) {
                            sb.append(bfr_st);
                        }
 
                        Log.i("chat", "+ FoneService - полный ответ сервера:\n"
                                + sb.toString());
 
                        // сформируем ответ сервера в string
                        // обрежем в полученном ответе все, что находится за "]"
                        // это необходимо, т.к. json ответ приходит с мусором
                        // и если этот мусор не убрать - будет невалидным
                        ansver = sb.toString();
                        ansver = ansver.substring(0, ansver.indexOf("]") + 1);
 
                        is.close(); // закроем поток
                        br.close(); // закроем буфер
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    } finally {
                        conn.disconnect();
                        Log.i("chat",
                                "+ FoneService --------------- ЗАКРОЕМ СОЕДИНЕНИЕ");
                    }
 
                    // запишем ответ  ---------------------------------->
                    if (ansver != null && !ansver.trim().equals("")) {
 
                        Log.i("chat",
                                "+ FoneService ---------- ответ содержит JSON:");
 
                        try {
                            // ответ превратим в JSON массив
                            JSONArray ja = new JSONArray(ansver);
                            JSONObject jo;
 
                            Integer i = 0;
 
                            while (i < ja.length()) {
 
                                // разберем JSON массив построчно
                                jo = ja.getJSONObject(i);
 
                                // создадим новое сообщение
 
                                my_var =  jo.getString("np_pod").trim()+" "+jo.getString("ulisa_pod").trim()+" "+
                                        jo.getString("dom_pod").trim()+" "+jo.getString("korp_pod").trim();
                                id_visova = jo.getString("id");
                                nom_tel = jo.getString("tel_client");
                                flag_lgota = jo.getString ("lgota");
 
 
 
                                i++;
 
                                // отправим броадкаст для ChatActivity
                                // если она открыта - она обновить ListView
                                Intent intent2 = new Intent("com.example.papa.action.UPDATE_ListView");
                                intent2.putExtra("dannie_visova",my_var);
                                intent2.putExtra("id_visova",id_visova);
                                intent2.putExtra("telefon",nom_tel);
                                intent2.putExtra("lgota",flag_lgota);
                                sendBroadcast(intent2);
 
 
                            }
                        } catch (Exception e) {
                            // если ответ сервера не содержит валидный JSON
                            Log.i("chat",
                                    "+ FoneService ---------- ошибка ответа сервера:\n"
                                            + e.getMessage());
                        }
                    } else {
                        // если ответ сервера пустой
                        Log.i("chat",
                                "+ FoneService ---------- ответ не содержит JSON!");
                    }
 
                    try {
                        Log.i("chat",
                                "+ ==================== пауза ===================");
                        Thread.sleep(15000);
                    } catch (Exception e) {
                        Log.i("chat",
                                "+ FoneService - ошибка процесса(перед return): "
                                        + e.getMessage());
                        return;
 
                    }
                }
            }
        });
 
        thr.setDaemon(true);
        thr.start();

return не отрабатывается. почему???

Добавлено через 36 минут
проблема оказалась иной. судя по отладчику, потоков запускается два! как так??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2016, 20:08     Не работает остановка потока!
Посмотрите здесь:

Завершение потока AsyncTask Android
Остановка службы Android
Android Завершение потока
Android Завершения потока
Android Оповещение в UI из потока
Остановка зацикленого потока Android
Остановка выполнения таймера (CountDownTimer) из другого класса Android
Android Остановка / воспроизведение аудио
Android Остановка анимации
Низкая производительность потока Android
Android Возврат данных из потока
Остановка потока Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
04.06.2016, 20:12     Не работает остановка потока! #2
Serg_123, видимо, startService вызывается дважды. Чтобы избежать этого, запускайте потоки в onCreate
Serg_123
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 19
04.06.2016, 23:20  [ТС]     Не работает остановка потока! #3
Спасибо) так и оказалось..)
Yandex
Объявления
04.06.2016, 23:20     Не работает остановка потока!
Ответ Создать тему
Опции темы

Текущее время: 05:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru