Какие плюсы и минусы создания кэша на WeakReference

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

Ответ

Плюсы:

  • Автоматическое освобождение памяти при нехватке (GC удалит объекты, на которые нет сильных ссылок).
  • Удобно для кэширования временных данных (например, Bitmap в ImageLoader).

Минусы:

  • Нет гарантии, что объект будет в кэше (может быть удалён GC в любой момент).
  • Сложность отладки (непредсказуемость времени жизни объектов).
  • Не подходит для критичных данных, которые должны сохраняться.

Пример:

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

// Добавление  
weakCache["key"] = WeakReference(bitmap)  

// Получение  
val cachedBitmap = weakCache["key"]?.get()  
if (cachedBitmap == null) {  
    // Пересоздать или загрузить заново  
}  

Итог: Используйте для неважных данных, где потеря кэша допустима. Для надёжности лучше LruCache.