Почему Bundle не подходит для больших данных, а ViewModel? - PullRequest
0 голосов
/ 16 октября 2018

Я прочитал это , и там написано:

Для простых данных действие может использовать метод onSaveInstanceState () и восстановить свои данные из пакета в onCreate (), но этот подход подходит только для небольших объемов данных, которые можно сериализовать, а затем десериализовать, а не для потенциально больших объемов данных, таких как список пользователей или растровые изображения.

Мой вопрос: почему?Чем ViewModel отличается от Bundle в том, что касается постоянства данных между экземплярами?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Связка - это класс, используемый для передачи данных между компонентами андроида, такими как действия, фрагменты и т. Д.

В основном для действия , когда действиеВ случае каких-либо изменений конфигурации, пакет помогает сохранить небольшое количество пользовательских данных, которые будут восстановлены после применения новой конфигурации.Из-за ограниченного объема памяти, предоставляемой любому приложению, утверждается, что

этот подход подходит только для небольших объемов данных, которые можно сериализовать, а затем десериализовать, а не для потенциально больших объемов данных, таких каксписок пользователей или растровых изображений .

Кроме того, это не имеет ничего общего с жизненным циклом активности.

С Руководство по ViewModel заявлено, что

Класс ViewModel предназначен для хранения и управления данными, связанными с пользовательским интерфейсом сознательно жизненным циклом .Класс ViewModel позволяет данным переживать изменения конфигурации, такие как повороты экрана.

Таким образом, любые данные, которые вам необходимы, чтобы выдержать любые изменения конфигурации, могут быть частью класса ViewModel, это может быть любойбольшой объем данных.

Дайте мне знать, если все еще в замешательстве, надеюсь, это поможет!


Редактировать :

Разница в тонкой линии

Пакет - это то, что обеспечивается активностью после изменения конфигурации.Таким образом, OS отправляет основной пакет намерения.Затем ОС создает новое действие (да, это новый объект того же действия), отменяет передачу данных и передает намерение новому действию.

Объекты ViewModel являются чем-токоторые предоставляются ViewModelFactory, что находится вне контекста действия и не зависит от экземпляра действия.

0 голосов
/ 16 октября 2018

Данные, хранящиеся в Bundle, сериализуемы и могут выжить во время процесса - вы можете восстановить их после повторного запуска приложения.С другой стороны, ViewModel выживает только в течение configuration change (например, поворот экрана) и не сохраняет свои данные, если компонент умирает.

...