С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

6
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 524
17.12.2013, 00:23 #2
В сервисе организовать метод завершения потока. А в главном активите вызывать его при завершении.
1
angryrobot
Командир зеленых роботов
348 / 285 / 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();
1
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
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 / 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 ))))
0
ASDFD12
49 / 49 / 11
Регистрация: 15.09.2012
Сообщений: 495
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
Сообщений: 524
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) из другого класса - Программирование Android
При входе в активити в методе onCreate выполняется таймер: new CountDownTimer(40000, 1000) { public void onTick(long...

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

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

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


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

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

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