Какой метод вызывается после того, как намерение запускает действие?

Я знаю, что при первом создании активности в игру вступает ее метод onCreate().

Предположим, что есть основное действие, которое запускает другое действие (secondActivity.java) с помощью намерения, а затем это второе действие снова запускает основное действие с помощью намерения. Мой вопрос заключается в том, вызывается ли метод onRestart() основного действия после получения намерения или вызывается метод onCreate()?

Заранее спасибо!


person Rohan Bhatia    schedule 07.01.2017    source источник
comment
почему бы просто не попробовать? просто переопределите методы, вызовите супер.... и запишите имя метода   -  person Koen Van Looveren    schedule 07.01.2017
comment
Я это сделал, и вызывался метод onCreate, и я был сбит с толку, поскольку этого не должно быть, потому что onCreate вызывается только один раз на протяжении всего жизненного цикла.   -  person Rohan Bhatia    schedule 07.01.2017
comment
Но ответ CommonsWare все прояснил.   -  person Rohan Bhatia    schedule 07.01.2017


Ответы (3)


Мой вопрос заключается в том, вызывается ли метод onRestart() основного действия после получения намерения или вызывается метод onCreate()?

Это зависит от того, будет ли создан новый экземпляр основного действия.

По умолчанию будет один. В этом случае новый экземпляр основного действия будет вызываться с onCreate(). исходный экземпляр основного действия остается один.

Однако с помощью флагов Intent (например, FLAG_ACTIVITY_REORDER_TO_FRONT) или настроек манифеста вы можете организовать возврат исходного экземпляра основного действия на передний план. В этом случае исходный экземпляр будет вызываться с onNewIntent() (чтобы предоставить вам Intent, используемый с startActivity(), который вернул действие на передний план). Его также следует вызывать с помощью onRestart(), onStart() и onResume() как часть возвращения на передний план.

person CommonsWare    schedule 07.01.2017
comment
Спасибо! Итак, будет ли лучше, если я выведу свой исходный экземпляр main на передний план или все в порядке, если я просто позволю создать еще один экземпляр main? - person Rohan Bhatia; 07.01.2017
comment
@RohanBhatia: Это зависит от вас. Повторное использование активности экономит память. Но в какой-то степени это зависит от того, как вы настраиваете навигацию. Если вы создаете новый экземпляр, ваша последовательность действий будет M -> S -> M2 (M=основной, S=второй, M2=второй экземпляр основного). Итак, когда пользователь нажимает НАЗАД из M2, он переходит к S, а когда он нажимает НАЗАД из S, он переходит к M. Если вы переупорядочиваете стек и повторно используете M, когда пользователь нажимает НАЗАД из M, он переходит к S, и когда они нажимают НАЗАД из S, они выходят из вашего приложения. - person CommonsWare; 07.01.2017

Вот изображение из жизненного цикла Android из документации:

Жизненный цикл Android

Когда вы запускаете второе действие, onPause() и т. д. будут вызываться в первом действии, затем onCreate() и т. д. будут вызываться во втором действии. Как вы можете видеть на диаграмме выше, когда вы нажимаете назад, onRestart() должно вызываться в первой активности.

person rekire    schedule 07.01.2017
comment
Тем временем я добавил некоторые подробности. - person rekire; 07.01.2017

Если вы начинаете новое намерение, вызывается метод onCreate().

person Malik    schedule 07.01.2017
comment
Вы уверены, потому что сайт разработчиков Android говорит: «Вся жизнь активности происходит между первым вызовом onCreate(Bundle) и последним вызовом onDestroy(). - person Rohan Bhatia; 07.01.2017