Когда WeakReference удаляется в кэше

«Когда WeakReference удаляется в кэше» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

WeakReference удаляется из кэша, когда сборщик мусора (GC) определяет, что на объект больше нет сильных ссылок. В Android это происходит автоматически при нехватке памяти или во время цикла сборки мусора.

Пример использования WeakReference в кэше изображений:

val imageCache = mutableMapOf<String, WeakReference<Bitmap>>()

fun cacheImage(key: String, bitmap: Bitmap) {
    imageCache[key] = WeakReference(bitmap)
}

fun getCachedImage(key: String): Bitmap? {
    return imageCache[key]?.get()
}

Нюансы:

  1. Объект может быть удален в любой момент, даже если память не заполнена
  2. Не гарантируется время удаления
  3. Всегда нужно проверять get() на null перед использованием
  4. Подходит для кэширования дорогих объектов, которые можно пересоздать