Остановка отдельного потока сервиса
Остановка отдельного потока сервиса
Всем привет.
1. Запускаю сервис в отдельном потоке.
2. Останавливаю сервис через stopSelf(). В сервисе срабатывает метод onDestroy().
3. Потока сервиса не убивается и продолжает отсвечивать в ADM.
Нужно ли отдельно убивать потока сервиса в этой ситуации?
Это нормально, что он продолжает работать?
1. Запускаю сервис в отдельном потоке.
2. Останавливаю сервис через stopSelf(). В сервисе срабатывает метод onDestroy().
3. Потока сервиса не убивается и продолжает отсвечивать в ADM.
Нужно ли отдельно убивать потока сервиса в этой ситуации?
Это нормально, что он продолжает работать?
Arbeit macht Fry
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Остановка отдельного потока сервиса
Да это нормально. Ведь перед запуском потока вы его как демона не пометили?
myThread.setDaemon(true)
Если нет, то поток должен продолжить работу.
О том как правильно работать с потоками и как их лучше останавливать можете прочитать в умных книгах по Java, глава про потоки.
myThread.setDaemon(true)
Если нет, то поток должен продолжить работу.
О том как правильно работать с потоками и как их лучше останавливать можете прочитать в умных книгах по Java, глава про потоки.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Остановка отдельного потока сервиса
А где и как это сделать, если процесс помечается таковым в манифесте? И что это даст?KamiSempai писал(а):Да это нормально. Ведь перед запуском потока вы его как демона не пометили?
myThread.setDaemon(true)
.
Я правильно понимаю, что такой ненужный процесс система сама убьет, и это проблемой не является?
Arbeit macht Fry
Re: Остановка отдельного потока сервиса
Потоки демоны удаляются в то же время, когда удаляется поток родитель. Часто используется для анимации.Fry писал(а):А где и как это сделать, если процесс помечается таковым в манифесте? И что это даст?KamiSempai писал(а):Да это нормально. Ведь перед запуском потока вы его как демона не пометили?
myThread.setDaemon(true)
.
Я правильно понимаю, что такой ненужный процесс система сама убьет, и это проблемой не является?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
Donald E. Knuth.
Donald E. Knuth.
Re: Остановка отдельного потока сервиса
Советую ещё глянуть простое популярное решение http://stackoverflow.com/questions/1470 ... -a-service
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Остановка отдельного потока сервиса
Я тоже так раньше делал, пока не понял, что вместо этого можно легко использовать interrupt.Yurets писал(а):Советую ещё глянуть простое популярное решение http://stackoverflow.com/questions/1470 ... -a-service
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Остановка отдельного потока сервиса
Да, но interrupt может и не остановить поток. При вызове этого метода поток просто получает сообщение "Поток остановись", но в отдельных случаях это сообщение может быть проигнорировано...KamiSempai писал(а):Я тоже так раньше делал, пока не понял, что вместо этого можно легко использовать interrupt.Yurets писал(а):Советую ещё глянуть простое популярное решение http://stackoverflow.com/questions/1470 ... -a-service
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Остановка отдельного потока сервиса
Угу. если мы к примеру стоим на блокирующем методе и читаем какие-нибудь данные через сокет, то мы не дойдём до места где можем проверить условие isInterruptedПри вызове этого метода поток просто получает сообщение "Поток остановись", но в отдельных случаях это сообщение может быть проигнорировано...
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Остановка отдельного потока сервиса
Хм, а установка "running = false" разве не может быть проигнорировано? Это же тоже посылка сообщение "Поток остановись". Тут все зависит от прямоты рук.Yurets писал(а):Да, но interrupt может и не остановить поток. При вызове этого метода поток просто получает сообщение "Поток остановись", но в отдельных случаях это сообщение может быть проигнорировано...KamiSempai писал(а):Я тоже так раньше делал, пока не понял, что вместо этого можно легко использовать interrupt.Yurets писал(а):Советую ещё глянуть простое популярное решение http://stackoverflow.com/questions/1470 ... -a-service
Для остановки сетевых операций есть свои механизмы. Вот, например, для HttpUriRequest http://developer.android.com/reference/ ... ml#abort().Mikhail_dev писал(а):Угу. если мы к примеру стоим на блокирующем методе и читаем какие-нибудь данные через сокет, то мы не дойдём до места где можем проверить условие isInterruptedПри вызове этого метода поток просто получает сообщение "Поток остановись", но в отдельных случаях это сообщение может быть проигнорировано...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.