onRestoreInstanceState()
вызывается только при воссоздании активности после того, как она была убита ОС. Такая ситуация случается, когда:
- ориентация устройства меняется (ваша деятельность уничтожается и воссоздается)
- перед вами другое действие, и в какой-то момент ОС убивает ваше действие, чтобы освободить память (например). В следующий раз, когда вы начнете свою деятельность, будет вызван
onRestoreInstanceState()
.
В отличие от этого: если вы находитесь в своей деятельности и нажимаете кнопку Back
на устройстве, ваша деятельность завершена () завершена (то есть воспринимается как выход из настольного приложения), и при следующем запуске приложения она запускается. «свежий», то есть без сохраненного состояния, потому что вы намеренно вышли из него при нажатии Back
.
Другой источник путаницы заключается в том, что когда приложение теряет фокус на другое приложение, вызывается onSaveInstanceState()
, но при переходе обратно к вашему приложению onRestoreInstanceState()
может не вызываться. Это тот случай, который описан в первоначальном вопросе, т. Е. Если ваша активность НЕ была убита в тот период, когда другая активность была впереди, onRestoreInstanceState()
НЕ будет вызвана, потому что ваша активность в значительной степени «живая».
В целом, как указано в документации для onRestoreInstanceState()
:
Большинство реализаций просто используют onCreate (Bundle) для восстановления своих
состояние, но иногда это удобно делать после того, как все
инициализация была выполнена или чтобы подклассы могли решить,
использовать вашу реализацию по умолчанию. Реализация по умолчанию этого
Метод выполняет восстановление любого состояния просмотра, которое ранее было
заморожено onSaveInstanceState (Bundle).
Как я читал: нет причины переопределять onRestoreInstanceState()
, если только вы не подклассифицируете Activity
, и ожидается, что кто-то будет наследовать ваш подкласс.