Ситуации, когда метод службы onDestroy () не вызван?

Я знаю, что метод onDestroy () службы никогда не может быть вызван, но может ли кто-нибудь сказать мне, когда может произойти такой сценарий? Меня особенно интересует, можно ли убить Службу, но ее виртуальная машина будет продолжать работать.

Я спрашиваю, потому что у меня есть служба, которая регистрирует ContentObservers в методе onStartCommand () службы и отменяет их в onDestroy (). Если метод onDestroy () службы никогда не вызывался, потому что вся виртуальная машина была убита (вместе с создаваемыми ею наблюдателями), это было бы хорошо. Но мне интересно, может ли служба «уйти» без вызова onDestroy (), в то время как наблюдатели, созданные ею, будут жить и продолжать получать изменения.

Я знаю, что метод onDestroy () службы никогда не может быть вызван, но может ли кто-нибудь сказать мне, когда может произойти такой сценарий?

Здесь три головы:

  • Если пользовательская команда останавливает вас из приложения «Настройки»

  • Если Android нуждается в ОЗУ в спешке (например, для обработки входящего телефонного звонка) и выбирает завершить процесс, чтобы освободить эту ОЗУ

  • Вы завершаете процесс с DDMS

Кроме того, если ваша служба аварийно завершает работу с необработанным исключением, Android может считать сервис несуществующим и пропустить onDestroy() . Я не уверен в этом, поскольку я специально не пробовал это.

Но мне интересно, может ли служба «уйти» без вызова onDestroy (), в то время как наблюдатели, созданные ею, будут жить и продолжать получать изменения.

Помимо возможности необработанного исключения, о которой я упоминал выше, я вполне уверен, что если процесс будет прекращен в условиях, когда onDestroy() не вызывается.

Также, если приложение переустановлено / обновлено, ondestroy () никогда не вызывается.