Управление перезагрузкой Android-активности после остановки процесса
Мое приложение работает на специальном устройстве под управлением специальной сборки Android Gingerbread 2.3.7
Есть условия, когда система прекратит работу моего приложения. Я предполагаю, что производитель устройства учитывает эти чрезвычайные ситуации, когда все сторонние приложения должны быть немедленно закрыты, чтобы устройство могло выполнять свои основные задачи.
Я могу продублировать поведение, которое я вижу на устройстве, с помощью эмулятора и в DDMS, выбрав мою задачу и нажав кнопку «Остановить процесс». Вот поведение, которое я вижу.
Мое приложение обычно выполняет четыре действия: действие A запускает действие B, B запускает действие C, а C запускает действие D. Поэтому, когда действие D выполняется сверху, мой стек выглядит так:
A - B - C - D
Если в этот момент процесс завершается, действие D не получает вызов onPause () или onStop (). У него нет возможности спасти свое состояние.
После завершения процесса Android ActivityManager запускает новую задачу для моего приложения и запускает Activity C. Я думаю, что это стандартное поведение Android для перезапуска сбойных приложений.
У меня вопрос, могу ли я контролировать это поведение при перезапуске? Если Android собирается перезапустить мое приложение, мне нужно восстановить стек активности, потому что «Деятельность C» на самом деле не имеет смысла запускать отдельно (нажатие кнопки «Назад» приведет к выходу из приложения, что не имеет смысла для этого действия).
Могу ли я предотвратить этот перезапуск? Можно ли перезагрузить все мои действия по порядку? Могу ли я сделать перезапуск, просто начав занятие А?
Я нашел этоинтересная дискуссия Я полагаю, это объясняет, почему перезапускается действие C, а не действие D.
Когда процесс перезапускается - если процесс, выполняющий приоритетное действие, исчезает, система отбрасывает это действие, если для него нет действительного сохраненного состояния (обычно это означает, что оно приостановлено и предоставило системе результат onSaveInstanceState до паузы). Как только он решит, выбрасывать это действие или нет, он возобновит любое действие, которое сейчас находится на вершине стека. Если это одно из ваших действий - либо из-за того, что у вас есть другой, за которым произошел сбой, либо из-за того, что произошел сбой, было каким-то образом установленное состояние паузы - тогда он снова запустит ваш процесс, чтобы показать это главное действие.
И некоторые похожие вопросы, такие какПредотвратить восстановление стека активности? и это интереснонить