Есть ли необходимость использовать onSaveInstanceState и onRestoreInstanceState при использовании компонентов архитектуры Android LiveData и ViewModel?

Компоненты архитектуры Android предоставляют классы LiveData и ViewModel, которые более дружелюбный и предназначен для более компактного Activity/Fragment. Эти классы обрабатывают хранение данных при изменении конфигурации, но меня не устраивает их использование по сравнению с API-интерфейсами платформы Activity. Являются ли onSaveInstanceState(Bundle) и onRestoreInstanceState(Bundle) необходимыми или полезными для сохранения состояния активности?


person Zeatual Chang    schedule 15.06.2017    source источник


Ответы (2)


onSaveInstanceState и onRestoreInstanceState по-прежнему полезны.

ViewModel хранит данные только тогда, когда процесс активен.
Но onSaveInstanceState и onRestoreInstanceState могут хранить данные, даже если процесс остановлен.

ViewModel прост в использовании и полезен для сохранения больших данных при изменении ориентации экрана.
onSaveInstanceState и onRestoreInstanceState могут сохранять данные, когда процесс находится в фоновом режиме (в фоновом режиме процесс приложения может быть остановлен системой в любое время).

person UnknownStack    schedule 03.07.2017

Предположим сценарий: пользователь находится в activity A, затем переходит в activity B.

но из-за нехватки памяти ОС Android уничтожает activity A , поэтому связанный с ним ViewModel тоже уничтожает. (Вы можете эмулировать его, отметив Don't keep activities в параметрах разработчика)

теперь пользователь возвращается к activity A, ОС Android пытается создать новые объекты Acivity и ViewModel. поэтому вы потеряли данные в ViewModel.

Но все же значения в saveInstanceState есть.

person Mojtaba Haddadi    schedule 29.07.2019