Будет ли onCreate вызываться после onStop без onDestroy посередине?
Короткий ответ: Нет
Длинный ответ:
onCreate
не будет вызываться, если только onStop
был вызван на activity
. После onStop
, если пользователь перейдет к действию, это будет onStart
(до этого будет называться onRestart
).
Теперь позвольте мне объяснить, как onCreate
будет называться после onStop
без onDestroy
называют.
Для этого вы должны смотреть на этой приоритетной иерархии процесса в андроиде:
активности остается в переднем плане процессов от времени onResume
было названо, но не была вызвана , И поскольку приоритетные процессы имеют наивысший приоритет, он не будет убит.
не вызывается, когда пользователь больше не сможет взаимодействовать с activity
но VISIBLE. Пример: когда вы открываете DialogFragment
над действительностью. Затем процесс активности перемещается в видимый процесс. Это имеет меньший приоритет, чем процесс переднего плана, но имеет достаточно приоритета, чтобы не быть убитым.
Не после того, что приходит onStop
, который не вызывается, когда пользователь больше не сможет видеть активность, что означает, что деятельность является не видно. Это происходит, когда процесс активности перемещается в фоновые процессы. Теперь его можно убить, если системе требуется больше памяти, и ваша деятельность потребляет больше памяти, чем другие (это не в тему ответа на этот вопрос, на котором сначала нужно убить фона).
Так что если деятельность, которая находится в фоновом режиме и убита системой, onDestroy
не гарантируется называться. И в этом случае onCreate
будет вызываться после onStop
без вызова onDestroy
.
Вот почему в образе вопроса (деятельность жизненный цикл), показано, что onCreate
будет называться после onStop
если процесс App убит.
Edit 1:
Если вы хотите, чтобы справиться с чем угодно (например, освобождая память, убивая память ресурсоемких задач, и т.д.), прежде чем деятельность разрушается и так onDestroy
не гарантируется называть, вы можете реализовать ComponentCallbacks2
(только для уровня api> = 14) для получения обратного вызова onTrimMemory
с различными этапами вашего приложения/активности. Различают этапы и их объяснения: here.
Если вы хотите реализовать то же самое на уровне API < 14, вы можете использовать обратный вызов onLowMemory
, который примерно эквивалентен TRIM_MEMORY_COMPLETE
.
Ваш ответ полезен. onDestroy() не гарантируется. Странно, что не существует метода onKilled(), поэтому невозможно обработать все события смерти. Теперь я изучаю, как использовать Сервис для решения моей проблемы. –
@JeffreyChen, Да, есть способы получить эти обратные вызовы, я обновил свой ответ, просто просмотрите его. –