#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. Я не хочу возвращаться к завершенным действиям, но я ожидал, что кнопка «Назад» вернется к другим действиям в моем приложении, которые все еще были запущены. Это предположение неверно?