3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
||||||
1 | ||||||
Завершение потока13.04.2013, 23:10. Показов 9082. Ответов 34
Метки нет (Все метки)
Необходимо корректно завершить поток.
Сейчас код такой
Далее будет проверка на isInterrupted и если было прерывание, то поток завершится. Но складывается впечатление, что поток вылетает. Не могу поймать где. Правильно ли завершение потока ?
0
|
13.04.2013, 23:10 | |
Ответы с готовыми решениями:
34
Завершение потока AsyncTask Завершение потока завершение потока Завершение потока |
0x5B4C322291BD52AE
96 / 96 / 0
Регистрация: 04.03.2013
Сообщений: 295
|
|
13.04.2013, 23:18 | 2 |
xbarmaglot, у меня другой вопрос ты это делаешь в сервисе если да то зачем?
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
13.04.2013, 23:21 [ТС] | 3 |
да, в сервисе. Не хотел предыдущую тему захламлять.
А делаю, т.к. нужны регулярные действия, которые долгие. Чтоб не вещать главный поток, то запускаю отдельный
0
|
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
|
|
13.04.2013, 23:22 | 4 |
в чем проблема завершить его с помощью флага в любой нужный для тебя момент?
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
13.04.2013, 23:26 [ТС] | 5 |
раньше так и делал, но где-то меня переубедили, что interrupt единственное правильное решение.
А для флага нужно еще и заводить свой метод остановки. Добавлено через 1 минуту И флаг не прервет sleep и все wait-функции
0
|
0x5B4C322291BD52AE
96 / 96 / 0
Регистрация: 04.03.2013
Сообщений: 295
|
|
13.04.2013, 23:26 | 6 |
xbarmaglot, сервис и так в отдельном потоке работает и расчитан чтобы в нем делать долгую работу нет надобности порождать еще потоки это не рекомендуется. После того как он выполнил работу он завершается если тебе переодически нужно его запускать используют AlarmManager.
0
|
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
|
|
13.04.2013, 23:26 | 7 |
все время пользуюсь флагом, метод же не проблема сделать, да и вы можете в любой момент сами остановить поток.
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
13.04.2013, 23:29 [ТС] | 8 |
А вот не хотелось бы чтоб он вообще останавливался
Добавлено через 28 секунд ну а как с sleep и wait-функциями ?
0
|
0x5B4C322291BD52AE
96 / 96 / 0
Регистрация: 04.03.2013
Сообщений: 295
|
|
13.04.2013, 23:32 | 9 |
Он останавливается только в крайнем случае и с помощью того же AlarmManager можно его снова запустить (в случае критической оставки).
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
13.04.2013, 23:41 [ТС] | 10 |
Тогда объясню подробнее.
Служба обрабатывает входящие события. При этом сохраняет данные. Запускаются при этом 2 потока. Один архивирует данные. Он запускается раз в час. Это может занять несколько секунд. Второй, запускается раз в 10 минут. Он отправляет архивированные данные на почту - это может занять несколько минут. При этом блокировать основной поток сервиса нельзя, т.к. может прийти событие на обработку. Вот я и запускаю потоки. Но складывается впечатление, что потоки вылетают. Причем в отладке не видно этого. А причина - нет регулярной работы потоков. Видно по отосланным данным и времени создания архивов. Вот и вопрос - правильно ли я останавливаю поток. Или в моем коде есть ошибка, которая может привести к остановке потока.
0
|
14.04.2013, 16:42 | 11 |
оО
С каких это пор??? Caution: A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). xbarmaglot, почему бы не использовать AsynkTask для этого?
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
14.04.2013, 17:21 [ТС] | 12 |
0
|
14.04.2013, 19:28 | 13 | ||||||||||
Для этого можно использовать TimerTask.
Смотрите. Каркас асинхронной задачи:
0
|
0x5B4C322291BD52AE
96 / 96 / 0
Регистрация: 04.03.2013
Сообщений: 295
|
|
14.04.2013, 19:35 | 14 |
Ты прав! Я просто в основном использую IntentService и предположил что ТС тоже его использует это конечно моя ошибка нужно было уточнить этот момент.
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
14.04.2013, 20:34 [ТС] | 16 |
YuraAAA, а зачем Handler. Разве нельзя просто запустить TimerTask?
Добавлено через 38 минут Все, понял как сделать. Остался только один вопрос - если я запускаю задачу каждую минуту, а задача выполняется дольше чем минута, то будет создана вторая задача, которая будет делить ресурсы с первой. А хотелось бы, чтобы вторая задача не запускалась, если первая уже запущена и не отработала.
0
|
14.04.2013, 20:56 | 17 | ||||||||||
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
||||||
14.04.2013, 21:00 [ТС] | 18 | |||||
Не понял зачем ?
P.S. Да и так проще
0
|
14.04.2013, 21:51 | 19 |
Если Вы не работаете с UI из этого потока, то можно выкинуть handler.
Вызывать асинхронную задачу регулярно, через определённый промежуток времени - не есть гуд. Ведь как я понял, задача должна точно окончиться, перед тем как снова запустится? По-этому, лучше вызывайте асинхронную задачу из неё же. Но это моё личное мнение, может я и не прав
0
|
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
|
|
14.04.2013, 21:54 [ТС] | 20 |
А запуск задачи можно производить не с Main потока ?
Поэтому я и использовал изначально поток
0
|
14.04.2013, 21:54 | |
14.04.2013, 21:54 | |
Помогаю со студенческими работами здесь
20
Завершение потока Завершение потока. Завершение потока Завершение потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |