Вопрос на собеседовании · Android-разработчик
Как ViewModel переживает изменение конфигурации и что важно учитывать в lifecycle?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
ViewModel хранится в ViewModelStore владельца, поэтому при повороте экрана новая Activity или Fragment получает тот же экземпляр, пока владелец действительно не завершён. Это позволяет держать UI-state и отменять работу в viewModelScope, но ViewModel не является долговременным хранилищем: после убийства процесса системой она создаётся заново.
Для восстановления небольших параметров используют SavedStateHandle, а основные данные получают из устойчивого источника по идентификатору. Потоки состояния собирают только в видимом lifecycle-состоянии, например через repeatOnLifecycle, чтобы экран не получал обновления после остановки и не создавал лишних collectors.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Карточка товара хранит productId в SavedStateHandle, а ViewModel строит state из репозитория. После поворота экран не перезапрашивает данные без необходимости, а после process death создаёт ViewModel заново и восстанавливает товар по сохранённому ID.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Чем ViewModel отличается от retained Fragment?
- Когда применять SavedStateHandle?
- Как передать результат между экранами?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.
Mira