android: Если активность убита, при перезагрузке, что происходит?

1

Допустим, что активность A начинает активность B с намерениями и передает данные за дополнительную плату. Затем система убивает мой процесс из-за проблем с памятью. Тогда скажем, что мое приложение выведено на передний план некоторым средним знанием, также предположим, что активность A является активностью запуска в манифесте, а затем она активирует активность B (возможно, воспитывая A сначала), поскольку это была последняя активность.

Если он вызывает активность B, то в onCreate() у меня есть доступ к моему оригинальному намерению или у меня есть какой-либо способ узнать, что система перезапустила мою активность?

Теги:

2 ответа

0

"Затем система убивает мой процесс из-за проблем с памятью и перезапускает, а затем восстанавливает последнее действие, то есть B."

Это неправильно, и вы должны удалить его из своего вопроса.

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

Я понимаю ваш вопрос как:

Если из стека активности было удалено действие (потому что требуется память системы), и вы перезапустите его, у вас есть доступ к первоначальному намерению вызова.

Интерпретируясь таким образом, легко видеть, что ответ отрицательный. Поскольку единственный способ возобновить убитую деятельность - это использование нового намерения, старое намерение, естественно, не будет доступно.

НО

Если вам нужен доступ к данным из экземпляра вашей активности, который был убит, вам необходимо сохранить его в OnSaveInstanceState. Сохраненное состояние будет предоставлено в методе OnCreate при следующем запуске вашей активности.

См. Жизненный цикл процесса: 3. Фоновая активность

Используя это, вы можете сохранить первоначальное намерение вызова и использовать его для воссоздания активности. Я бы подумал об эффекте этого на пользователе очень осторожно, прежде чем делать это.

  • 0
    Я отредактировал свой пост. Таким образом, возможно ли, чтобы активность B возникла любым возможным способом. Я поднимаю это, потому что я читаю, что люди говорят, что B, так как это последнее действие может появиться, и оно не инициализировано должным образом, просто хотел убедиться. Также я не уверен, всегда ли OnSaveInstanceState вызывается при уничтожении активности.
0

Если активность убита - вы получите активность A - я полагаю, что в вашем файле maifest у вас есть только одно действие с фильтром намерения <category android:name="android.intent.category.LAUNCHER"/>

  • 0
    Я имел в виду, что система убивает мой процесс. Из того, что я знаю, когда это происходит, система возвращает последнюю активность процесса
  • 0
    Вы можете проверить это, убив процесс вручную - в настройках - приложениях - в информации о вашем приложении есть кнопка принудительной остановки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню