#android #activity #activity_life_cycle
В теории жизненного цикла Activity существует переход от onPause() к onResume(), но ни эксперименты с запуском AlertDialog, ни входящий звонок на телефон во время исполнения моего Activity, не дают сработки только onPause() без срабатывания onStop(). В какой реальной ситуации на практике происходит срабатывание только onPause() без срабатывания onStop() и происходит ли вообще?
Ответы
Ответ 1
onPause() всегда вызывается (если с логикой программы всё нормально). onStop() может не вызваться, к примеру, если не хватает памяти. Это даже в документации сказано: Это метод может так и не вызваться, в ситуациях, когда не хватает памяти, чтобы продолжить работу вашего Activity после вызова onPause(). Так же метод finish() ломает логику и не позволяет вызваться нужным ивентам. Если вы напишите что-то такое: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); finish(); } @Override protected void onDestroy() { super.onDestroy(); Log.e("MainActivity", "onDestroy"); } @Override protected void onPause() { super.onPause(); Log.e("MainActivity", "onPause"); } @Override protected void onStop() { super.onStop(); Log.e("MainActivity", "onStop"); } То сработает только onDestroy(), а onPause() и onStop() нет.Ответ 2
Если посмотреть на блок-схему вызова методов жизненного цикла, то можно заметить, что метод onPause() вызывается после ухода активити в фон, а метод onStop() при ее исчезновении с экрана. Соответственно, в штатной работе активити, вызов метода onPause() без вызова метода onStop() возможен, когда активити ушла в фон, но остается видимой на экране, а затем происходит возврат в эту активити. На практике это может быть, к примеру, вызов диалога и возврат из диалога в активити. Про нештатные ситуации уже сказали - при уничтожении активити через GC (например, катастрофическая нехватка памяти) будет вызван только onPause() и активити уничтожена.
Комментариев нет:
Отправить комментарий