LruCache
Класс, реализующий кеш на основе алгоритма LRU (Least Recently Used). Он хранит ограниченное количество объектов в памяти, автоматически удаляя самые старые (наименее используемые) элементы, когда достигается предел кеша. Это помогает эффективно управлять памятью, сохраняя часто используемые объекты и освобождая память от редко используемых.
Представим класс для хранения кеша битмапов
import android.graphics.Bitmap
import android.util.LruCache
// Создаём класс с LruCache для хранения Bitmap
class BitmapCache(maxSize: Int) {
// Инициализируем LruCache с максимальным размером кеша
private val cache = object : LruCache<String, Bitmap>(maxSize) {
// Определяем размер каждого Bitmap (в байтах)
override fun sizeOf(key: String, value: Bitmap): Int {
// Подсчитываем количество байтов в Bitmap
return value.byteCount / 1024 // в килобайтах
}
}
// Метод для добавления Bitmap в кеш
fun putBitmap(key: String, bitmap: Bitmap) {
cache.put(key, bitmap)
}
// Метод для получения Bitmap из кеша
fun getBitmap(key: String): Bitmap? {
return cache.get(key)
}
// Метод для удаления Bitmap из кеша
fun removeBitmap(key: String) {
cache.remove(key)
}
}
Использование
// Определяем максимальный размер кеша (например, 4MB)
val maxMemory = (Runtime.getRuntime().maxMemory() / 1024).toInt()
val cacheSize = maxMemory / 8 // Используем 1/8 доступной памяти
// Инициализируем кеш
val bitmapCache = BitmapCache(cacheSize)
// Добавляем Bitmap в кеш
val bitmap: Bitmap = ... // Ваш Bitmap
bitmapCache.putBitmap("image_key", bitmap)
// Получаем Bitmap из кеша
val cachedBitmap = bitmapCache.getBitmap("image_key")
// Удаляем Bitmap из кеша
bitmapCache.removeBitmap("image_key")
Как это работает:
putBitmap
и getBitmap
позволяют добавлять и извлекать изображения по ключу (например, по URL изображения).