Возобновление последнего действия при нажатии на значок запуска

Как я вижу, большинство приложений возобновляет последнюю активность при нажатии на значок запуска. Однако кажется, что это не поведение по умолчанию. В моей активности запуска приложения всегда запускается при нажатии на значок запуска.

Как настроить мое приложение для возобновления последнего действия при щелчке по значку запуска, а приложение уже запущено.

Проблема:

Я не могу сказать, что это ошибка, но такое поведение наблюдается со времени первой версии Android. При запуске приложения из пусковой установки возникает проблема с задачами и roottasks в сборке релизов. Вы можете найти соответствующий отчет об ошибке здесь .

Решение:

Его можно исправить добавлением следующего кода в ваш onCreate вашей активности запуска:

if (!isTaskRoot()) { finish(); return; } 

Я встретил ту же проблему и решил ее, добавив android:launchMode="singleInstance" в тег приложения внутри манифеста. Вы можете проверить детали о запуске в

андроид: launchMode

Вы уверены, что не покидаете приложение? См. Также Activity Stack .

Это зависит от жизненного цикла вашей деятельности. См. «Жизненный цикл деятельности» на сайте разработчика Android. Если ваша активность просто приостановлена, она возобновится, если действие вернется на передний план, и если вы нажмете на значок.

Если вы хотите, чтобы пользователь продолжал последнее действие, даже если действие было уничтожено, вы должны закодировать собственное решение, чтобы перейти к правильному действию.

Это будет уродливый взлом, но вы можете попробовать следующее:

Поместите статическую переменную, называемую lastStopped в подклассу приложения (или любой синглтон, если на то пошло). По умолчанию установите значение null.

В onCreate вашего первого действия у вас будет что-то вроде этого:

 if (MyApp.lastStopped != null) { Intent intent = new Intent(this, MyApp.lastStopped.getClass()); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); finish(); return; } 

Теперь любая деятельность, которую вы хотите вернуть после нажатия на дом, должна иметь:

 @Override protected void onStop() { super.onStop(); MyApp.lastStopped = this; } 

Убедитесь, что вы очистили MyApp.lastStopped при запуске другого действия, чтобы предотвратить утечку памяти.

Дайте мне знать, если это сработает для вас, это было для меня!

Вы можете проверить флаг: FLAG_ACTIVITY_BROUGHT_TO_FRONT чтобы поймать случай, когда действие было перенесено на передний FLAG_ACTIVITY_BROUGHT_TO_FRONT и не создано.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { finish(); return; } // Regular activity creation code... }