Ответ вслух Junior ViewModel и сохранение состояния спрашивают часто обновлено

Что такое ViewModel и зачем она

Вопрос

Расскажи, что такое ViewModel, как она работает и что в ней можно и нельзя хранить.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

ViewModel это объект, который держит состояние экрана и логику представления и переживает смену конфигурации. Activity при повороте пересоздаётся, а ViewModel лежит в ViewModelStore, который передаётся новому экземпляру, и провайдер возвращает тот же объект.

Что должно прозвучать в ответе

  • Держит состояние и логику экрана, переживает смену конфигурации

  • Хранится в ViewModelStore владельца, onCleared при окончательном закрытии

  • viewModelScope для корутин

  • Нельзя ссылки на Activity, View, их Context

  • Не переживает смерть процесса, для этого SavedStateHandle

  • Наружу неизменяемый StateFlow, события методами

Что могут спросить следом

  • Как ViewModel получает зависимости?
  • Как протестировать ViewModel?
  • Чем AndroidViewModel отличается от ViewModel?

Разбор

ViewModel это объект, который держит состояние экрана и логику представления и переживает смену конфигурации. Activity при повороте пересоздаётся, а ViewModel лежит в ViewModelStore, который передаётся новому экземпляру, и провайдер возвращает тот же объект. Когда экран закрыт окончательно, store очищается, вызывается onCleared, и отменяется viewModelScope, в котором я запускаю корутины. Хранить в ней нельзя ничего, что живёт меньше неё: Activity, фрагменты, View и их Context, иначе утечка. Если нужен контекст, это Application. ViewModel не переживает смерть процесса, поэтому ввод пользователя и выбранные параметры кладу в SavedStateHandle. Состояние отдаю наружу как неизменяемый StateFlow, а UI сообщает о действиях вызовами методов. Зависимости приходят через конструктор с помощью Hilt, а тесты пишу без эмулятора: подменяю Dispatchers.Main тестовым диспетчером и репозитории фейками.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме