Почему onRestoreInstanceState() никогда не вызывается
Я пытаюсь сохранить данные в своей деятельности и восстановить их.
Я сохраняю данные в onSaveInstanceState()
, а затем пытаюсь восстановить данные в onRestoreInstanceState()
.
Я устанавливаю точку останова, вызов метода onSaveInstanceState()
вызывает. Но onRestoreInstanceState()
или onCreate()
никогда не делал.
Вот мои шаги:
- запустите мой
Activity
.
- нажмите кнопку "Главная" на телефоне.
onSaveInstanceState()
вызывается.
- Щелкните значок в панели запуска и снова запустите мой
Activity
.
В это время вызываются только onRestart()
. Но не onRestoreInstanceState()
или onCreate()
.
Кто-нибудь знает, почему?
Ответы
Ответ 1
Ну, если вызывается onRestart()
, значение переменных экземпляра будет поддерживаться самим стеке приложения и, следовательно, нет необходимости их восстанавливать.
onCreate()
метод вызывается только тогда, когда вызывается Activity
onStop()
и процесс уничтожается.
Пожалуйста, обратитесь к Activity
жизненному циклу Жизненный цикл активности Android для четкого понимания.
Вы можете проверить, вызван ли метод onStop()
, и если ваш процесс убит. Я не думаю, что ваш процесс был убит описанным вами сценарием.
Метод onRestoreInstanceState()
очень сложный. Я не знаю, когда именно это называется, но я видел, что он был вызван один раз, перейдя от Потройта к Пейзажу.
Ответ 2
Из doc:
Система вызывает onRestoreInstanceState() только в случае сохранения сохраненного состояния.
Ответ 3
Я задал знакомый вопрос ранее здесь
Здесь несколько шагов для проверки onRestoreInstanceState()
:
- Нажмите главный экран
- Убейте приложение через adb
- Запустите приложение снова
Ответ 4
Выполните следующие действия (с помощью Android Studio):
- Создать новый фильтр регистрации, например. AppState
-
Запустите приложение на своем эмуляторе. Вы увидите:
I/AppState: onCreate
I/AppState: onStart
I/AppState: onResume
-
Нажмите Ctl-F12, чтобы повернуть эмулятор. Вы увидите:
I/StateChange: onPause
I/StateChange: onSaveInstanceState
I/StateChange: onStop
I/StateChange: onDestroy
I/StateChange: onCreate
I/StateChange: onStart
I/StateChange: onRestoreInstanceState
I/StateChange: onResume
Это приводит к разрушению и воссозданию активности путем внесения изменений в конфигурацию устройства, таких как поворот с портретной на альбомную.
Ответ 5
См. приведенную ниже ссылку, как проверить onSaveInstanceState()
и onRestoreInstanceState()
на реальном устройстве или в эмуляторе.
Этот метод использует параметр AlwaysFinish, который проще и быстрее, чем убийственные процессы. Этот метод также обеспечивает контроль Activity
, а не контроль уровня процесса:
http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/