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

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

Войти
Регистрация
Восстановить пароль
 
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 424
#1

Остановка зацикленого потока - Программирование Android

17.12.2013, 00:04. Просмотров 944. Ответов 6
Метки нет (Все метки)

Есть активити. Из него запускается сервис. В методе onStartCommand сервиса, запускается поток, в котором присутствует бесконечный цикл. При остановке сервиса из активити, поток продолжает работать. Как его остановить из активити.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 00:04     Остановка зацикленого потока
Посмотрите здесь:

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

Не работает остановка потока! - Программирование Android
Помогите пожалуйста! Укажите на ошибку! Почему не останавливается поток???? public class FoneService extends Service { // ИМЯ...

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

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

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

Остановка выполнения таймера (CountDownTimer) из другого класса - Программирование Android
При входе в активити в методе onCreate выполняется таймер: new CountDownTimer(40000, 1000) { public void onTick(long...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 510
17.12.2013, 00:23     Остановка зацикленого потока #2
В сервисе организовать метод завершения потока. А в главном активите вызывать его при завершении.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
17.12.2013, 00:28     Остановка зацикленого потока #3
Для начала немного перепиши свой бесконечный цикл в отельном потоке:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            Thread myThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    //Пока поток не прервали - крутим цикл
                    while (!Thread.currentThread().isInterrupted()) { 
                        System.out.println("Привет из потока " + Thread.currentThread().getName());
                        
                        try {
                            Thread.sleep(10000);
                        } catch (InterruptedException e) {
                            //Если поток прервали пока мы спали - возникнет исключение.
                            //Сразу выходим из метода run
                            return;
                        }
                    }
                }
            });
            myThread.start();
Затем переопредели метод который вызывается при остановке сервиса и впиши туда

Java
1
myThread.interrupt();
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 424
17.12.2013, 00:29  [ТС]     Остановка зацикленого потока #4
Цитата Сообщение от korsaj Посмотреть сообщение
В сервисе организовать метод завершения потока. А в главном активите вызывать его при завершении.
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Java
1
2
3
4
5
 public void onDestroy() {
      thread.stop(); // где thread зацикленный поток
        super.onDestroy();
      
      }
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
17.12.2013, 00:34     Остановка зацикленого потока #5
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Java
1
2
3
4
5
 public void onDestroy() {
      thread.stop(); // где thread зацикленный поток
        super.onDestroy();
      
      }
Метод стоп вызывать не надо, это очень плохая привычка хотя и работать будет. Поток должен умирать по своей воле, после того как сам закроет все файлы/сетевые соединения которые он открыл. Даже если у тебя там ничего такого нет - всё равно лучше не надо. Хотя бы из-за того что эклипс перечеркивает тебе метод stop ))))
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 424
17.12.2013, 00:37  [ТС]     Остановка зацикленого потока #6
Цитата Сообщение от angryrobot Посмотреть сообщение
Для начала немного перепиши свой бесконечный цикл в отельном потоке:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            Thread myThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    //Пока поток не прервали - крутим цикл
                    while (!Thread.currentThread().isInterrupted()) { 
                        System.out.println("Привет из потока " + Thread.currentThread().getName());
                        
                        try {
                            Thread.sleep(10000);
                        } catch (InterruptedException e) {
                            //Если поток прервали пока мы спали - возникнет исключение.
                            //Сразу выходим из метода run
                            return;
                        }
                    }
                }
            });
            myThread.start();
Затем переопредели метод который вызывается при остановке сервиса и впиши туда

Java
1
myThread.interrupt();
Спасибо как раз то что надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 09:23     Остановка зацикленого потока
Еще ссылки по теме:

Завершение потока - Программирование Android
Необходимо корректно завершить поток. Сейчас код такой class MyThread extends Thread { private void method() throws...

Завершения потока - Программирование Android
Можно как-нить запустить новый поток, только после того как завершится первый???

Оповещение в UI из потока - Программирование Android
Доброго времени. суть проблеммы в сл. не работает повторное оповещение UI из потока. в приложении создаеЦа новый поток для выполнения некой...

Подмена потока с микрофона - Программирование Android
Нужно подменипть поток с микрофона, чтобы отправить его при разговоре. Типа диалер, который вместо звука с микрофона будет пускать другой...


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

Или воспользуйтесь поиском по форуму:
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 510
17.12.2013, 09:23     Остановка зацикленого потока #7
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Откройте пример из эклипса BluetoothChat, в нем сделано примерно так как описал ASDFD12
В нем только сокет закрывается.
Yandex
Объявления
17.12.2013, 09:23     Остановка зацикленого потока
Ответ Создать тему
Опции темы

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