Junior
60
questionbank

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

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

ViewModel — это компонент Jetpack, предназначенный для хранения и управления данными UI-связанным способом. Его основная цель — сохранять данные UI во время изменений конфигурации, таких как поворот экрана, и переживать жизненный цикл Activity или Fragment.

Особенности ViewModel:

  • Сохранение данных: Переживает изменения конфигурации и даже смерть Activity/Fragment, восстанавливая данные при пересоздании.
  • Отделение логики: Отделяет логику подготовки данных для UI от самого UI (Activity/Fragment).
  • Лайфсайкл-оруженность: Связан с жизненным циклом Activity или Fragment.
  • Исключение утечек памяти: Не имеет прямой ссылки на View, Lifecycle или Activity/Fragment, что предотвращает утечки памяти.

Как использовать:

  1. Создайте класс, наследующий ViewModel.

    kotlin
  2. Получите экземпляр ViewModel в Activity или Fragment.

    kotlin
  3. Используйте ViewModelProvider.Factory для создания экземпляров ViewModel с зависимостями.

    kotlin

Сравнение с onSaveInstanceState():

ХарактеристикаViewModelonSaveInstanceState()
Переживание конфиг. изм.ДаДа (для небольших объемов данных)
Переживание процессаНет (после уничтожения процесса данные теряются)Да (для небольших объемов данных)
Хранение данныхОбъекты, LiveDataBundle (примитивы, Serializable, Parcelable)
Утечки памятиНет (при правильном использовании)Возможно при хранении ссылок на Activity/View
Сложность реализацииСложнее для простых сценариевПроще для простых сценариев

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