Компоненты архитектуры Android предоставляют классы LiveData
и ViewModel
, которые более дружелюбный и предназначен для более компактного Activity/Fragment. Эти классы обрабатывают хранение данных при изменении конфигурации, но меня не устраивает их использование по сравнению с API-интерфейсами платформы Activity. Являются ли onSaveInstanceState(Bundle)
и onRestoreInstanceState(Bundle)
необходимыми или полезными для сохранения состояния активности?
Есть ли необходимость использовать onSaveInstanceState и onRestoreInstanceState при использовании компонентов архитектуры Android LiveData и ViewModel?
Ответы (2)
onSaveInstanceState и onRestoreInstanceState по-прежнему полезны.
ViewModel хранит данные только тогда, когда процесс активен.
Но onSaveInstanceState и onRestoreInstanceState могут хранить данные, даже если процесс остановлен.
ViewModel прост в использовании и полезен для сохранения больших данных при изменении ориентации экрана.
onSaveInstanceState и onRestoreInstanceState могут сохранять данные, когда процесс находится в фоновом режиме (в фоновом режиме процесс приложения может быть остановлен системой в любое время).
Предположим сценарий: пользователь находится в activity A
, затем переходит в activity B
.
но из-за нехватки памяти ОС Android уничтожает activity A
, поэтому связанный с ним ViewModel
тоже уничтожает. (Вы можете эмулировать его, отметив Don't keep activities
в параметрах разработчика)
теперь пользователь возвращается к activity A
, ОС Android пытается создать новые объекты Acivity
и ViewModel
. поэтому вы потеряли данные в ViewModel
.
Но все же значения в saveInstanceState есть.