Подтвердить что ты не робот

Почему onRestoreInstanceState() никогда не вызывается

Я пытаюсь сохранить данные в своей деятельности и восстановить их. Я сохраняю данные в onSaveInstanceState(), а затем пытаюсь восстановить данные в onRestoreInstanceState().

Я устанавливаю точку останова, вызов метода onSaveInstanceState() вызывает. Но onRestoreInstanceState() или onCreate() никогда не делал.

Вот мои шаги:

  • запустите мой Activity.
  • нажмите кнопку "Главная" на телефоне. onSaveInstanceState() вызывается.
  • Щелкните значок в панели запуска и снова запустите мой Activity.

В это время вызываются только onRestart(). Но не onRestoreInstanceState() или onCreate().

Кто-нибудь знает, почему?

4b9b3361

Ответ 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/