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")

Как это работает:

  1. Размер кеша определяется как часть доступной памяти (в примере 1/8 от максимальной памяти устройства).
  2. Методы putBitmap и getBitmap позволяют добавлять и извлекать изображения по ключу (например, по URL изображения).
  3. Автоматическое управление памятью: когда кеш заполняется, наименее используемые изображения удаляются, чтобы освободить место для новых.