onCreate всегда вызывается при переходе назад с намерением

У меня есть действие под названием HomeActivity, которое имеет SurfaceView и показывает изображение предварительного просмотра камеры. Это занятие довольно тяжелое и кажется медленным, если вы начинаете/перезапускаете его.

Итак, я провел некоторые исследования и обнаружил, что метод onCreate каким-то образом всегда вызывается. На мой взгляд, этого не должно происходить, если активность уже запущена?

В документации говорится: Вызывается при первом создании действия. Здесь вы должны выполнить всю обычную статическую настройку: создать представления, привязать данные к спискам и т. д. Этот метод также предоставляет вам пакет, содержащий ранее замороженное состояние активности, если оно было. Всегда следует onStart().

Вот метод, который обрабатывает возврат:

protected void gotoHome() {
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

Редактировать:

Вот как я ухожу из HomeActivity... ничего особенного:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class);
startActivity(i);

person Mark    schedule 05.07.2012    source источник
comment
Убедитесь, что вы не завершили () HomeActivity при запуске другого действия из него.   -  person Egor    schedule 05.07.2012
comment
onCreat() вызывается, когда вы возвращаетесь с помощью метода gotoHome()?   -  person Mohsin Naeem    schedule 05.07.2012
comment
@Егор Я не звоню финишу()   -  person Mark    schedule 05.07.2012
comment
Вы проверили, вызывается ли метод onDestroy из HomeActivity?   -  person Jonathan Naguin    schedule 05.07.2012
comment
@JonathanNaguin Да, он уничтожается после начала другого действия, в этом проблема, но как мне этого избежать? Это реально возможно?   -  person Mark    schedule 05.07.2012
comment
Подождите, каждый раз, когда вы запускаете SomeOtherActivity, он немедленно уничтожает HomeActivity? Это на устройстве или эмуляторе?   -  person matt5784    schedule 05.07.2012
comment
@ matt5784 Да, это то, что происходит. Работаю на двух устройствах, но попробую и в эмуляторе!   -  person Mark    schedule 05.07.2012
comment
Попробуйте это в эмуляторе и посмотрите, будет ли поведение таким же.   -  person matt5784    schedule 05.07.2012
comment
@ matt5784 Я попробовал это в эмуляторе. Мне кажется, что HomeActivity уничтожается и создается заново после вызова функции gotoHome().   -  person Mark    schedule 05.07.2012
comment
@ Марк, ты отпускаешь камеру, когда выходишь из HomeActivity?   -  person Jonathan Naguin    schedule 05.07.2012


Ответы (1)


Да, когда вы хотите вернуться к HomeActivity, вам нужно использовать эти флаги:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

Вот соответствующий раздел документации по Intent.FLAG_ACTIVITY_CLEAR_TOP:

Текущий экземпляр действия B в приведенном выше примере либо получит новое намерение, которое вы начинаете здесь, в своем методе onNewIntent(), либо сам завершится и перезапустится с новым намерением. Если он объявил свой режим запуска «множественным» (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP с тем же намерением, тогда он будет завершен и создан заново; для всех других режимов запуска или если установлен FLAG_ACTIVITY_SINGLE_TOP, то это намерение будет доставлено в onNewIntent() текущего экземпляра.

person David Wasser    schedule 05.07.2012
comment
Большое тебе спасибо! Facepalm... может быть, у меня есть эта идея! - person Mark; 05.07.2012
comment
Иногда меня поражает, как быстро здесь можно получить полезный ответ ;-) Рад быть полезным. - person David Wasser; 05.07.2012
comment
Привет, Дэвид. Мое действие oncreate вызывается каждый раз, когда я возвращаюсь из его дочернего действия. Не могли бы вы мне помочь? - person Yyy; 16.09.2016
comment
@NancyY, пожалуйста, откройте новый вопрос и опишите свою проблему, опубликуйте соответствующий код и т. д. Добавление комментария к этому ответу — неправильный способ привлечь внимание. - person David Wasser; 16.09.2016