Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ASDFD12
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
#1

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

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

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

Остановка потока
Доброго времени суток. Пишу первое приложение под андроид, поэтому прошу...

Не работает остановка потока!
Помогите пожалуйста! Укажите на ошибку! Почему не останавливается поток???? ...

Остановка анимации
Здравствуйте, мне нужно запрограммировать кнопку(button1) на остановку...

Остановка ProgressBar
Всем привет, суть такова: в одной активности реализован ProgressBar ( помог...

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

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

6
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
17.12.2013, 00:23 #2
В сервисе организовать метод завершения потока. А в главном активите вызывать его при завершении.
1
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
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();
1
ASDFD12
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
17.12.2013, 00:29  [ТС] #4
Цитата Сообщение от korsaj Посмотреть сообщение
В сервисе организовать метод завершения потока. А в главном активите вызывать его при завершении.
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Java
1
2
3
4
5
 public void onDestroy() {
      thread.stop(); // где thread зацикленный поток
        super.onDestroy();
      
      }
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
17.12.2013, 00:34 #5
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Java
1
2
3
4
5
 public void onDestroy() {
      thread.stop(); // где thread зацикленный поток
        super.onDestroy();
      
      }
Метод стоп вызывать не надо, это очень плохая привычка хотя и работать будет. Поток должен умирать по своей воле, после того как сам закроет все файлы/сетевые соединения которые он открыл. Даже если у тебя там ничего такого нет - всё равно лучше не надо. Хотя бы из-за того что эклипс перечеркивает тебе метод stop ))))
0
ASDFD12
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
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();
Спасибо как раз то что надо.
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
17.12.2013, 09:23 #7
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Как это сделать? Дайте пример кода. Хотя бы примерно. Я так понял этот код можна поместить в метод onDestroy() сервиса. Вот так?
Откройте пример из эклипса BluetoothChat, в нем сделано примерно так как описал ASDFD12
В нем только сокет закрывается.
0
17.12.2013, 09:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 09:23
Привет! Вот еще темы с решениями:

Остановка приложения по клику на крестик
вот какой у меня вопрос. предположим, я работаю в стороннем приложении в...

Остановка выполнения таймера (CountDownTimer) из другого класса
При входе в активити в методе onCreate выполняется таймер: new...

Остановка потока
Уважаемые программисты, прошу помощи, ибо не нашел логического объяснения своей...

Остановка потока
Есть программа, которая при клике левой кнопкой мыши создает поток, который...


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

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

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