Синглтон хранит Context экрана
В проекте есть кэш изображений:
object ImageCache {
lateinit var context: Context
fun init(c: Context) {
context = c
}
}
// в Activity
ImageCache.init(this)
В чём главная проблема этого кода?
- Код упадёт при повороте экрана: после пересоздания Activity поле окажется неинициализированным и обращение к нему бросит исключение
- Объект живёт всё время работы процесса и удерживает уничтоженный экран — это утечка памяти, здесь нужен контекст приложения
- Ничего страшного: при следующем создании экрана ссылка перезапишется, и старый экран сразу заберёт сборщик мусора
- Проблема только в lateinit: поле стоит сделать nullable и проверять на null перед каждым использованием
