#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.