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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Serg_123
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 19
#1

Не работает остановка потока! - Программирование Android

04.06.2016, 20:08. Просмотров 171. Ответов 2
Метки нет (Все метки)

Помогите пожалуйста! Укажите на ошибку! Почему не останавливается поток????
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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает остановка потока! (Программирование Android):

Остановка потока - Программирование Android
Доброго времени суток. Пишу первое приложение под андроид, поэтому прошу сильно не пинать. Вопрос в следующем: на данный момент при...

Остановка зацикленого потока - Программирование Android
Есть активити. Из него запускается сервис. В методе onStartCommand сервиса, запускается поток, в котором присутствует бесконечный цикл. ...

Остановка службы - Программирование Android
Служба может быть остановлена системой по разным причинам: нехватка памяти, режим экономии энергии... А можно ли запретить остановку...

Остановка анимации - Программирование Android
Здравствуйте, мне нужно запрограммировать кнопку(button1) на остановку анимации. Пока получился только старт анимации. import...

Остановка ProgressBar - Программирование Android
Всем привет, суть такова: в одной активности реализован ProgressBar ( помог товарищ), при старте следующего действия, прогресс уходит и...

Остановка / воспроизведение аудио - Программирование Android
выручайте) в общем, есть всего одна кнопка, которая останавливает и воспроизводит изначально запущенное аудио. почему она только...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,433
Записей в блоге: 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
Спасибо) так и оказалось..)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2016, 23:20
Привет! Вот еще темы с ответами:

Остановка потока - C#
Уважаемые программисты, прошу помощи, ибо не нашел логического объяснения своей проблеме. В моей программе создан класс - &quot;клиент&quot;,...

Остановка потока - Java SE
Делаю игру на java eclipse. Использую потоки. С помощью них создаю изображения на фрейме, которые потом перемещаются... (ну это не...

Остановка потока - Java SE
Добрый вечер, благодарю за предыдущие 2 подсказки, они не очень помогли! Моя первая программа уже почти готова, но вот появилась такая...

остановка потока - Java SE
Начал изучать нити. Возник вопрос. Открываю новый потом main, жду 5 секунд и методом - iinterrup останавливаю его, но поток не...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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