executeor.shutdown () в сервисе onDestroy ()

Я хочу, чтобы мой исполнитель работал до тех пор, пока моя служба не перестанет работать.

Логическое решение, о котором я думаю, - это сделать executor.shutdown() на onDestroy() службы

Каковы будут последствия этого действия?

Я знаю, что когда я убиваю приложение, его службы не гарантируют прохождение onDestroy(), поэтому исполнитель никогда не преформирует shutdown()

Если служба является службой переднего плана, решит ли она эту проблему? И вообще как это правильно работать?

Общая информация о том, что я пытаюсь сделать - я намереваюсь получить доступ к методу в моем сервисе, который изменит / добавит задачи к исполнителю. Мне нужно, чтобы он действовал как "listener" до тех пор, пока я не перестану пользоваться сервисом, поэтому я не могу просто выключить его в любом другом месте, а не в onDestroy().


person sharon gur    schedule 02.06.2015    source источник


Ответы (1)


Последствия зависят от того, какие задачи вы выполняете в исполнителе. Если задачам не сообщается о завершении работы, они будут продолжать работать как завершение работы, только гарантируя, что новые задачи не могут быть отправлены. Вы можете создать исполнителя как демона. Или вы можете следовать этому предложению для правильного завершения работы

Важно отметить, что ваши задачи не должны оставлять ваши данные в поврежденном состоянии, так как они могут быть отключены в любой момент. Используйте транзакции, если вы обновляете базу данных, или соблюдайте соответствующие меры предосторожности, если вы пишете в файлы или сокеты.

person ata    schedule 02.06.2015
comment
Итак, если я установлю исполнителя как демон, он отключится, когда служба умрет? учитывая, что он был создан на сервисе? И если да, то задача, которая в данный момент работает / находится в очереди, по-прежнему будет выполнять свою работу? (они работают в другом потоке) - person sharon gur; 02.06.2015