Почему основное действие снова перезапускается после завершения его вызываемого намерения (Android 4.2.2)?

Приложение хорошо работает в Android 2.3.5, но не работает в Nexus 4 (Android 4.2.2).

Приложение: в onCreate основного действия оно вызывает другое действие через намерение.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class);
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(launchIntent);

    // I add a button dynamically here
}

Теперь с Nexus 4, после завершения намерения AndroidVideoCapture, он возвращается к началу onCreate, "setContentView(R.layout.activity_main);". Таким образом, намерение перезапускается снова и снова.

Почему?


person user1914692    schedule 07.05.2013    source источник


Ответы (2)


Попробуйте добавить

if (savedInstanceState == null) {
    final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class);
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(launchIntent);
}

savedInstanceState не равно null означает, что действие воссоздается.

person bclymer    schedule 07.05.2013
comment
Благодарю вас! Оно работает! Но могу ли я узнать, что произошло с Android 2.3.5 до 4.2.2, так что нам нужно добавить saveInstanceState? - person user1914692; 07.05.2013
comment
Вероятно, это что-то с более жестким управлением памятью. Android 4.2.2 сам по себе использует больше оперативной памяти, поэтому приложениям доступно меньше, а действия приостанавливаются, чтобы освободить оперативную память. - person bclymer; 08.05.2013
comment
Кроме того, в целом Android не обещает, что ваша активность не будет уничтожена, если она не видна. Таким образом, вы действительно не должны предполагать это, даже если оно работает иногда (или большую часть времени), потому что оно может вести себя по-разному на другом устройстве или если у пользователя есть другие настройки или приложения в памяти. - person Jay Bobzin; 08.05.2013
comment
Но это связано не только с детской активностью. Воссоздается моя родительская активность. - person user1914692; 09.05.2013

Вы можете проверить, включили ли вы «Не сохранять действия» в параметрах разработчика на устройстве Nexus 4. Если отмечено, отключите это. Эта опция доступна только с версии 4.0, и именно по этой причине ваша родительская активность «воссоздается».

person Siddharth N    schedule 07.05.2013
comment
Могу я узнать, почему он предназначен для воссоздания? - person user1914692; 09.05.2013
comment
Это чисто опция разработчика, которая помогает вам проверить, если 1. Вы сохранили состояние активности, прежде чем она перейдет в фоновый режим. 2. Правильно обрабатываются ситуации с нехваткой памяти (в этом случае действие будет уничтожено). Теперь, поскольку оно уничтожено, оно воссоздается, чтобы создать впечатление, что стек действий не поврежден. - person Siddharth N; 09.05.2013