Android: Как мне полностью удалить действие из стека действий?

#android #android-activity #history

#Android #android-активность #история

Вопрос:

У меня есть два действия FirstActivity и SecondActivity.

FirstActivity имеет фильтр намерений MAIN, LAUNCHER и DEFAULT. SecondActivity — это обычная активность, и в AndroidManifest не установлены никакие другие флаги.

В моем приложении включен C2DM, и при получении уведомления отображается значок панели задач, а при нажатии на него открывается SecondActivity.

Приход уведомлений имеет два сценария: во-первых, мое приложение уже запущено, когда пришло уведомление, а во-вторых, мое приложение полностью не запущено.

В первом сценарии все в порядке. Получено уведомление, я щелкнул в раскрывающемся списке уведомлений, и отображается моя вторая активность. Когда я нажимаю назад, SecondActivity завершается, и приложение переходит в фоновый режим. Когда я снова запускаю свое приложение из последних приложений, оно отображает FirstActivity, который является правильным, поскольку он является ОСНОВНЫМ, ПУСКОВЫМ и ПО УМОЛЧАНИЮ.

Во втором сценарии получено уведомление, я щелкнул по нему в раскрывающемся списке уведомлений, и отображается моя вторая активность. Когда я нажимаю назад, SecondActivity завершается, и приложение переходит в фоновый режим. Когда я снова запускаю свое приложение из последних приложений, оно отображает SecondActivity, что неверно. Я ожидаю, что будет отображаться FirstActivity, потому что это должно быть новое начало.

Я попытался принудительно завершить работу приложения после второго сценария, но результат тот же, мне нужно было перезагрузить телефон, чтобы снова начать с FirstActivity.

Ребята, вы сталкивались с такой же проблемой? или это только у меня? Как вы думаете, что не так с моей конфигурацией?

Я также попытался установить значение noHistory=false для SecondActivity, но результаты все те же.

Ответ №1:

Когда вы запускаете приложение из ярлыка «Недавнее приложение», оно запускает последнее действие. Таким образом, вы можете попробовать запустить приложение из списка приложений, посмотреть, решит ли это вашу проблему.

Комментарии:

1. Спасибо, чувак, это решает мою проблему, ха-ха, хотя это вообще не было проблемой. Ярлык в моем недавнем списке приложений фактически указывает на SecondActivity .

Ответ №2:

Это правильное поведение .. если вы запустите приложение через «Недавнее приложение», оно будет указывать на последнее действие. Попробуйте запустить его через обычный список приложений

Ответ №3:

Для вашего основного действия попробуйте установить режим lauch как «singleInstance» в файле AndroidManifest. для второго действия установите значение «Завершить при запуске задачи» равным true.

Комментарии:

1. Лучшей идеей было бы установить для clearTaskOnLaunch значение true в основном действии. Нет необходимости устанавливать singleInstance таким образом.

Ответ №4:

Во втором сценарии я думаю, что стек действий пуст, поскольку приложение закрыто. итак, теперь вы запускаете activity2, это означает, что это единственное действие в стеке. теперь желаемое обратное поведение может быть достигнуто путем переопределения onbackpress и запуска activity1, если это второй сценарий.

Комментарии:

1. на самом деле, во втором сценарии ожидаемый результат при нажатии кнопки «Назад» — завершить SecondActivity. Но когда приложение запускается из лаунчера или из недавнего приложения, оно отображает SecondActivity. я хочу, чтобы он отображал FirstActivity, потому что я ожидаю нового старта.

Ответ №5:

вы можете вызвать свое второе действие с установленным флагом no history следующим образом,

 intent1.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
  

У меня это работало несколько раз.

Читать из документа Android

Комментарии:

1. могу ли я узнать причину голосования «против» .. если у участника голосования «Против» есть какая-либо причина?

2. Я не голосовал против, но он сказал в вопросе: «Я также пытался установить noHistory=false для SecondActivity, но результаты все равно те же».

3. @Robert yeh чувак, я прочитал вопрос, но все же дал ответ, потому что это решение, которое я использую всегда.. да, я делаю еще одну вещь, переопределяя onPause, и в этом я вызываю finish(), поэтому всякий раз, когда он переходит в фоновый режим, он уничтожается.

4. Я только что попробовал это, переопределите onPause и вызовите finish(). Но результат все тот же. SecondActivity завершен, и приложение переходит в фоновый режим, но когда я снова запускаю приложение, оно отображает SecondActivity.