Если действия в заднем стеке завершены, вернется ли кнопка «Назад» к более ранним действиям?

#android #android-activity

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

Вопрос:

Краткие сведения

Вот мой сценарий:

  • Мое приложение запускает внешнее приложение (средство просмотра PDF).
  • Затем я завершаю () свою деятельность, которая запустила это приложение (в стеке действий все еще есть другие действия из моего приложения).
  • Если пользователь нажимает «Назад», он просто выходит из этого приложения, а не возвращается в мое приложение.

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

Если я не завершу () свою активность, кнопка возврата вернется к моей активности, поэтому я знаю, что базовая функция работает.

Подробнее

Мой стек действий:

MainActivity -> LoginActivity -> ActivityA -> ActivityB

На данный момент, я полагаю adb shell dumpsys activity , подтверждает стек:

История # 11: HistoryRecord{40c0c018 com.mypackage/com.mypackage.ActivityB}
История #10: HistoryRecord{40d27af0 com.mypackage/com.mypackage .ActivityA}
История # 9: HistoryRecord{40d31368 com.mypackage/com.mypackage.LoginActivity}
История # 8: HistoryRecord{40db2430 com.mypackage/com.mypackage.MainActivity}
История #7: HistoryRecord{40c2a978 com.mypackage/com.mypackage.LoginActivity}
История #6: HistoryRecord{40bf6008 com.mypackage/com.mypackage.LoginActivity}
История # 5: HistoryRecord{40542d58 com.htc.launcher/.Launcher}

Теперь my ActivityB запускает внешнее приложение для просмотра PDF.

В моем приложении есть определенные требования безопасности, что означает, что мне нужно заставить пользователя повторно ввести свой PIN-код, прежде чем он снова сможет увидеть информацию в приложении.

Для этого, когда приложение переходит в фоновый режим, я передаю намерение, которое сообщает ActivityA и ActivityB завершить () .

Когда пользователь нажимает кнопку «Назад» в программе просмотра PDF, я бы ожидал, что они вернутся к LoginActivity. К сожалению, приложение, похоже, просто завершает работу.

После запуска программы просмотра PDF adb shell dumpsys activity показывает, что стек:

История # 7: HistoryRecord{40b97a08 com.adobe.reader/.AdobeReader}
История # 6: HistoryRecord{40542d58 com.htc.launcher/.Launcher}
История # 5: HistoryRecord{40978318 com.google.android.gm/.ConversationListActivity }

mLastPausedActivity: HistoryRecord{40b4aa90 com.mypackage/com.mypackage .ActivityB}

Кто-нибудь знает, как должен работать этот сценарий? Наивно, я бы ожидал, что Android будет проходить обратный путь через задний стек, пока не достигнет LoginActivity …

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

Это приложение очень сложное, поэтому я не могу просто полностью отказаться от существующего дизайна. Существует множество точек входа (виджеты, уведомления, кнопка «Назад») и другие функции, которые зависят от сообщения пользовательского интерфейса о том, что приложение было прервано.

Я изучаю другие обходные пути (например, использование startActivityForResult , настройка Intent.FLAG_ACTIVITY_NO_HISTORY ActivityB и т. Д.), Но мне было бы интересно узнать, как Android работает обратно через стек.

Ответ №1:

Когда вы завершите () свою активность, она будет удалена из стека.

Вы не можете вернуться к нему, если он не создан снова.

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

1. Я не хочу возвращаться к завершенным действиям, но я ожидал, что кнопка «Назад» вернется к другим действиям в моем приложении, которые все еще были запущены. Это предположение неверно?