Я знаю, что метод onDestroy () службы никогда не может быть вызван, но может ли кто-нибудь сказать мне, когда может произойти такой сценарий? Меня особенно интересует, можно ли убить Службу, но ее виртуальная машина будет продолжать работать.
Я спрашиваю, потому что у меня есть служба, которая регистрирует ContentObservers в методе onStartCommand () службы и отменяет их в onDestroy (). Если метод onDestroy () службы никогда не вызывался, потому что вся виртуальная машина была убита (вместе с создаваемыми ею наблюдателями), это было бы хорошо. Но мне интересно, может ли служба «уйти» без вызова onDestroy (), в то время как наблюдатели, созданные ею, будут жить и продолжать получать изменения.
Я знаю, что метод onDestroy () службы никогда не может быть вызван, но может ли кто-нибудь сказать мне, когда может произойти такой сценарий?
Здесь три головы:
Если пользовательская команда останавливает вас из приложения «Настройки»
Если Android нуждается в ОЗУ в спешке (например, для обработки входящего телефонного звонка) и выбирает завершить процесс, чтобы освободить эту ОЗУ
Вы завершаете процесс с DDMS
Кроме того, если ваша служба аварийно завершает работу с необработанным исключением, Android может считать сервис несуществующим и пропустить onDestroy()
. Я не уверен в этом, поскольку я специально не пробовал это.
Но мне интересно, может ли служба «уйти» без вызова onDestroy (), в то время как наблюдатели, созданные ею, будут жить и продолжать получать изменения.
Помимо возможности необработанного исключения, о которой я упоминал выше, я вполне уверен, что если процесс будет прекращен в условиях, когда onDestroy()
не вызывается.
Также, если приложение переустановлено / обновлено, ondestroy () никогда не вызывается.