Есть ли необходимость использовать onSaveInstanceState и onRestoreInstanceState при использовании компонентов архитектуры Android LiveData & ViewModel?
Компоненты архитектуры Android обеспечивают LiveData
а также ViewModel
классы, которые более дружественны к жизненному циклу и предназначены для более узкого занятия / фрагмента. Эти классы обрабатывают хранение данных при изменениях конфигурации, но я запутался в их использовании по сравнению с API-интерфейсами Activity Framework. Являются onSaveInstanceState(Bundle)
а также onRestoreInstanceState(Bundle)
все еще необходимо или полезно для сохранения состояния активности?
3 ответа
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 есть.
Как и другие ответы, в которых говорится о сохранении , помимо простых изменений конфигурации, я думаю, что есть еще пара вариантов использования:
Причины производительности
Иногда вы не хотите хранить все последние значения атрибутов представления в
Инициализация для выполнения после восстановления
Некоторым представлениям может потребоваться инициализация, особенно из-за восстановления, поскольку сложный дизайн этих представлений не позволяет сохранить все. Например, у меня было, и если пользователь загружал страницу во время изменения конфигурации, я хочу, чтобы
Заключительное слово
Со всеми этими вещами я бы рекомендовал сохранить