Android — при переключении между двумя действиями порядок вызова методов жизненного цикла действия

Я хочу начать действие (ВТОРОЕ действие) из другого действия (ПЕРВОЕ действие), вызвав startActivity(intent). Прежде чем я на самом деле это сделал, я обнаружил, что люди говорят, что методы жизненного цикла вызываются в следующем порядке:

FIRST Activity onCreate
FIRST Activity onStart
FIRST Activity onResume
FIRST Activity onPause
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop

Всегда ли SECOND Activity onResume вызывается перед FIRST Acitivity onStop? я думал

FIRST Activity onPause
FIRST Activity onStop
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume

будет звонить, но вроде нет.

Кроме того, если я просто переключаюсь между двумя действиями,

FIRST Activity onPause
SECOND Activity onRestart
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop

Всегда ли методы вызываются в этом порядке?


person Naetmul    schedule 23.05.2013    source источник


Ответы (3)


Согласно документации, SECOND.onResume() должен вызываться перед FIRST.onStop() https://developer.android.com/guide/components/activities/activity-lifecycle.html#soafa (раздел Координация действий)

person Y2i    schedule 23.05.2013
comment
Но имейте в виду, что некоторые методы нельзя вызывать как onStop(). Внимательно прочитайте документацию по каждому методу, прежде чем внедрять свой код. - person OneWorld; 16.08.2013
comment
@OneWorld У вас есть какие-нибудь источники для этого? Я нигде не могу найти, что onStop() никогда нельзя вызывать. Я знаю, что onDestroy() не будет вызываться, если процесс находится в фоновом режиме и система решит убить его без вызова всех методов, но не могу найти таких утверждений о onStop(). - person Thorbear; 04.12.2016
comment
@Thorbear FIRST.onStop не будет вызываться, если SECOND не покрывает весь экран, поэтому FIRST остается на паузе и никогда не переходит в остановленное состояние. Кроме того, ссылка, кажется, мертва. - person Ivan Vergiliev; 25.05.2017

Предположим, есть два действия FirstActivity и SecondActivity.

Тогда этот порядок всегда будет оставаться одинаковым каждый раз.

// когда вы запускаете FirstActivity

(1) OnCreate() -> OnStart() -> OnResume() из FirstActivity будет вызываться

при запуске SecondActivity с помощью startActivity(new Intent(FirstActivity.this, SecondActivity.class))

(2) Будет вызван метод OnPause() FirstActivity, а затем

(3) Затем будет вызываться OnCreate() -> OnStart() -> OnResume() SecondActivity

(4) Будет вызван метод OnStop() FirstActivity

// когда вы нажимаете кнопку "Назад" в SecondActivity

(5) Затем будет вызываться OnPause() для SecondActivity

(6) Затем будет вызываться OnRestart() -> OnStart() -> OnResume() FirstActivity

(7) onStop() -> onDestroy() из SecondActivity будет вызываться

 Note: 

 (1) OnPause() will be called first when you navigate to any other activity.
 
 (2) OnStop() will be called when activity is no longer Visible on screen.
person Samir Mangroliya    schedule 12.09.2018

Сначала открывается действие: onCreate(),OnStart(),onResume()

Пользователь нажимает кнопку backButton(): onPause(), onStop(), onDestroy()

Переход к другому экрану:

Первый экран:: onPause(),onStop()

Второй экран: onCreate(), OnStart(), onResume()

Нажимает кнопку "Назад" в Activity2:

Второй экран: onPause(), onStop(), onDestroy()

Первый экран: onRestart(), onStart(), onResume()

Пользователь блокирует устройство: onPause(), onStop()

Снова открывает замок: onRestart(), onStart(), onResume()

person Phani varma    schedule 04.09.2018