Ответ
Плюсы:
- Автоматическое освобождение памяти при нехватке (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)
}
}