Вступить в клуб →
средняявопросKotlin и жизненный цикл Android

Синглтон хранит Context экрана

В проекте есть кэш изображений:

object ImageCache {
    lateinit var context: Context

    fun init(c: Context) {
        context = c
    }
}

// в Activity
ImageCache.init(this)

В чём главная проблема этого кода?

  • Код упадёт при повороте экрана: после пересоздания Activity поле окажется неинициализированным и обращение к нему бросит исключение
  • Объект живёт всё время работы процесса и удерживает уничтоженный экран — это утечка памяти, здесь нужен контекст приложения
  • Ничего страшного: при следующем создании экрана ссылка перезапишется, и старый экран сразу заберёт сборщик мусора
  • Проблема только в lateinit: поле стоит сделать nullable и проверять на null перед каждым использованием

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела