Что такое ViewModel и зачем она
Вопрос
Расскажи, что такое ViewModel, как она работает и что в ней можно и нельзя хранить.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Держит состояние и логику экрана, переживает смену конфигурации
Хранится в 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 ошибок.