Гарантирован ли сервис android для вызова onDestroy()?

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

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

И если это так, может ли ОС-сервис быть убит операционной системой?

Ответ 1

Я не уверен, где вы видите, что Служба, как гарантируется, имеет onDestroy(). Насколько я знаю, это не так. Если вы читаете эту страницу документов, в ней описываются условия, в которых служба может быть убита. Поэтому, если вы спрашиваете, будет ли убит процесс, который содержит как действие, так и службу, вызывается onDestroy() в службе (но не в действии), тогда ответ будет отрицательным; услуга onDestroy() не обязательно будет вызываться. Относительно того, может ли ОС внезапно убить только сервисный процесс: да, это возможно. Это особенно актуально, когда у вас много работы, и ваш вызов onStartCommand только приостанавливает работу для асинхронного выполнения. Тогда служба будет тратить большую часть своего времени не на защищенные методы onCreate, onStartCommand или onDestroy.

Ответ 2

Можно рассмотреть две вещи: