Приложение всегда запускается из корневой активности, а не возобновляет фоновое состояние (известная ошибка)

Я столкнулся с проблемой, упомянутой в этих ссылках:

http://code.google.com/p/android/issues/detail?id=2373

http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

У меня есть простая корневая деятельность с LAUNCHER и MAIN, и ничего больше . Я начинаю другую деятельность, не имея флагов или ничего лишнего в манифесте.

Я запускаю приложение (корневая активность) и оттуда запускаю 2-ю операцию. При нажатии кнопки «Главная» задача переходит к фону. При запуске приложения снова (из Launcher или с помощью кнопки «Главная» для последних приложений) он запускает новый экземпляр корневой активности поверх существующего стека.

Если я нажму кнопку «Назад», новая «корневая» активность будет закрыта, и будет видна старая 2-я активность, а это означает, что она запускает корневую активность в одной и той же задаче, вместо того чтобы перенести задачу на передний план.

Чтобы противостоять этому, я сделал запуск Single Mode в режиме запуска root . Теперь, когда я возвращаюсь домой и снова запускаю приложение, он очищает действия над старой корневой задачей и возвращает старую корневую задачу на передний план вместо того, чтобы просто привести всю старую задачу к второму действию сверху вниз. Обратите внимание, что старая корневая задача по-прежнему сохраняет состояние приложения, что означает, что это не новый экземпляр, но более высокие действия были убиты.

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

Это происходит из-за намерений, используемых для запуска приложения. Eclipse запускает приложение с использованием намерения без каких-либо действий и без категории. Launcher запускает приложение, используя намерение с android.intent.action.MAIN action и android.intent.category.LAUNCHER. Установщик запускает приложение с действием android.intent.action.MAIN и без категории.

Тот, кто отправил ошибку, должен был, вероятно, сформулировать ее как просьбу об улучшении плагина Eclipse, поскольку они, по-видимому, хотят, чтобы Eclipse обладал способностью притворяться пусковой установкой и запускать приложения с использованием того же намерения, что и запуска.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { // Activity was brought to front and not created, // Thus finishing this will get us to the last viewed activity finish(); return; } // Regular activity creation code... } 

Вот решение:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) { finish(); return; } Your code.... } 

EDIT: У меня были проблемы с новыми намерениями и уведомлениями. Предыдущее решение не работает с уведомлениями и намерениями …

Просто добавьте это в метод onCreate вашей активности запуска как это:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); if (!isTaskRoot()) { finish(); return; } // other function } 

Похожие решения для Xamarin.Android:

 if (!IsTaskRoot) { string action = this.Intent.Action; if (this.Intent.HasCategory(Intent.CategoryLauncher) && !string.IsNullOrEmpty(this.Intent.Action) && action == Intent.ActionMain) { Finish(); return; } } 
  • Приложение C # возвращает 0xE0434352 в диспетчер задач Windows, но это не сбой
  • Как включить tags задач TODO / FIXME / XXX в Eclipse?
  • Что используется для Task.FromResult в C #
  • Является ли Task.Factory.StartNew () гарантией использовать другой stream, чем вызывающий stream?
  • Пользовательский интерфейс UWP update из Task
  • Исключение (исключения) задачи не наблюдалось ни при ожидании задачи, ни при доступе к ее свойству Exception. В результате необнаруженное исключение было
  • Давайте будем гением компьютера.