Junior
67
questionbank

Расскажи о Jetpack ViewModel.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

ViewModel хранит и управляет UI-связанными данными c учетом жизненного цикла. Он переживает изменения конфигурации (повороты экрана, изменения раскладки), предотвращая потерю данных.

Ключевые особенности:

  • Сохранение данных: ViewModel не уничтожается при изменениях конфигурации, сохраняя состояние UI.
  • Отделение логики от UI: Бизнес-логика помещается в ViewModel, что упрощает тестирование и поддержку Activity/Fragment.
  • Интеграция с LiveData: Часто используется с LiveData для наблюдения за изменениями данных.

Пример использования:

kotlin
kotlin

Срок жизни: ViewModel живет до тех пор, пока жив связанный с ним Scope (например, Activity). При завершении Scope ViewModel уничтожается.

ViewModelProviders (сейчас ViewModelProvider) использовался для получения экземпляра ViewModel до Kotlin. В Kotlin рекомендуется использовать ViewModelProvider(this).get(MyViewModel::class.java).

Основные преимущества ViewModel перед обычными классами для хранения UI-состояния:

  • Переживает изменения конфигурации.
  • Управляется фреймворком жизненного цикла Jetpack.

Недостатки:

  • Может стать слишком большой при сложной UI-логике.
  • Не должен содержать ссылок на View, Context или другие объекты с жизненным циклом, чтобы избежать утечек памяти.