Ответ
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()
}
Нюансы:
- Объект может быть удален в любой момент, даже если память не заполнена
- Не гарантируется время удаления
- Всегда нужно проверять
get()на null перед использованием - Подходит для кэширования дорогих объектов, которые можно пересоздать