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

Context Activity во ViewModel

Вопрос

Почему во ViewModel нельзя хранить ссылку на Activity или её Context?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: ViewModel живёт дольше Activity и после поворота удержит старую: утечка. При повороте старая Activity уничтожается, а ViewModel остаётся.

Варианты ответа

  1. Activity нельзя передавать в конструктор Kotlin-класса, Lint выдаст ошибку
  2. ViewModel живёт дольше Activity и после поворота удержит старую: утечкаправильный ответ
  3. Это замедляет рекомпозицию: Compose будет следить за ссылкой на Activity
  4. Context нельзя использовать в фоновых потоках, где работает viewModelScope

Разбор

При повороте старая Activity уничтожается, а ViewModel остаётся. Если ViewModel хранит ссылку на старую Activity, сборщик мусора не сможет её освободить вместе со всей иерархией view. Если нужен контекст для ресурсов или системных сервисов, используют Application (через AndroidViewModel или DI с @ApplicationContext), который живёт всё время процесса.

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

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

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