Выбор ответа Junior Производительность и утечки памяти спрашивают часто обновлено
Context Activity в статическом поле
Вопрос
Почему companion object { lateinit var context: Context } с присвоением context = this в Activity опасен?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Статическое поле живёт весь процесс и держит уничтоженную Activity. Поле companion object на JVM статическое, это GC root.
Варианты ответа
lateinitнельзя использовать сContext, будет ошибка при обращении- Статическое поле живёт весь процесс и держит уничтоженную Activityправильный ответ
- Context нельзя хранить в полях Kotlin-классов, это запрещает Lint
- Это замедлит рекомпозицию: Compose будет отслеживать поле как состояние
Разбор
Поле companion object на JVM статическое, это GC root. После поворота или закрытия Activity объект остаётся достижимым через него и не собирается. Если нужен глобальный контекст, используют applicationContext, который живёт столько же, сколько процесс. С lateinit синтаксически всё в порядке, в Kotlin-классах Context хранить можно, если время жизни совпадает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.