Прокрутите
вниз до раздела
Apps
и установите переключатель
Don’tkeepactivities
в активное положение, как показано на рис.
4.8.
Теперь запустите приложение GeoQuiz, нажмите кнопку
NEXT
, чтобы перейти к следующему вопросу, и кнопку «Главный
экран». Нажатие кнопки «Главный экран»,
как вы уже знаете,
приведет к остановке activity. Журналы говорят, что
остановленная activity была завершена, так же как если бы ОС
Android удалила ее из памяти. Однако журналы также говорят,
что была вызвана функция
onSaveInstanceState(Bundle)
,
— поэтому надежда есть.
Рис. 4.8. Опция Don’t keep activities
Восстановите приложение (используя список приложений на
устройстве или эмуляторе), чтобы проверить, сохранилось ли
состояние так, как вы ожидали.
Поздравьте себя, если
приложение GeoQuiz открылось на том вопросе, который вы
видели в последний раз.
Обязательно выключите опцию
Don’tkeepactivities
, когда
закончите тестирование,
так как иначе она приведет к
снижению производительности. Помните, что нажатие кнопки
«Назад» вместо кнопки «Главный экран» всегда уничтожает
activity, независимо от того, включена ли эта опция. Нажатие
кнопки «Назад» сообщает ОС,
что пользователь закончил
работу с activity.
Сохраненное состояние экземпляра и записи activity
Как
данные,
которые
вы
сохраняете
в
onSaveInstanceState(Bundle)
,
сохраняются
после
уничтожения activity (и процесса)? Когда вызывается
onSave-
Instance
State(Bundle)
, данные сохраняются в объекте
Bundle
. Этот объект
Bundle
затем сохраняется в
записи activity
в ОС.
Чтобы понимать, как устроена запись activity, давайте
добавим
состояние stashed (сохранена) в жизненный цикл
activity (рис. 4.9).
Рис. 4.9. Полный жизненный цикл activity
Когда activity сохранена, сам объект
Activity
не
существует, но запись об activity сохранена в ОС. ОС может
восстановить activity с помощью этой записи, если необходимо.
Обратите
внимание, что ваша activity может перейти в
сохраненное состояние без вызова функции
onDestroy()
. Вы
можете быть уверены, что произойдет вызов
OnStop()
и
onSaveInstanceState(Bundle)
(если
что-то на устройстве
пошло не по плану). Как правило, вы переопределяете функцию
onSaveInstanceState(Bundle)
,
чтобы
она
собирала
небольшие переходные данные, относящиеся к текущей activity
в вашем наборе. Переопределение
OnStop()
позволяет
сохранить постоянные данные, такие как настройки
пользователя, так как ваша activity может быть завершена в
любой момент после завершения этой функции.
Когда эти записи удаляются? После завершения activity они
уничтожаются раз и навсегда. В
этот момент ваша запись
activity удаляется. Также запись удаляется при перезагрузке
(вспомните, что подразумевается под завершением activity,
повторив главу 3).
Do'stlaringiz bilan baham: