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

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

Ответ

Плюсы:

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

Минусы:

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

Пример:

val cache = mutableMapOf<String, SoftReference<Bitmap>>()

fun getCachedBitmap(key: String): Bitmap? {
    return cache[key]?.get() ?: loadBitmap(key)?.also { 
        cache[key] = SoftReference(it) 
    }
}