Android
LruCache
Поиск…
замечания
Вы должны использовать Lru Cache в приложениях, где повторяющиеся нагрузки на ресурсы повлияют на поведение плавного приложения. Например, фотогалерея с большими эскизами (128x128).
Всегда будьте осторожны с размером кеша Lru, так как слишком высокая установка может повлиять на приложение.
После того, как Lru Cache больше не полезен, избегайте ссылок на него, чтобы позволить сборщику мусора очистить его от памяти.
Для лучшей производительности не забудьте загрузить ресурсы, такие как растровые изображения, используя лучшие методы, такие как выбор правильного параметра inSampleSize, прежде чем добавлять его в кэш Lru.
Инициализация кеша
Кэш Lru сохранит все добавленные ресурсы (значения) для быстрого доступа, пока не достигнет предела памяти, и в этом случае он потеряет менее используемый ресурс (значение) для хранения нового.
Для инициализации кеша Lru вам необходимо указать максимальное значение памяти. Это значение зависит от ваших требований к приложениям и от того, насколько важно, чтобы ресурс поддерживал плавное использование приложения. Рекомендуемое значение для галереи изображений, например, будет 1/8 из вашей максимальной доступной памяти.
Также обратите внимание, что Lru Cache работает на основе ключа. В следующем примере ключ - это String
а значение - Bitmap
:
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 8;
LruCache<String, Bitmap> = memoryCache = new LruCache<String, Bitmap>(cacheSize) {
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getByteCount();
}
};
Добавление растрового изображения (ресурса) в кеш
Чтобы добавить ресурс в кэш, вы должны предоставить ключ и ресурс. Сначала убедитесь, что значение уже не в кеше
public void addResourceToMemoryCache(String key, Bitmap resource) {
if (memoryCache.get(key) == null)
memoryCache.put(key, resource);
}
Получение растрового изображения (Resouce) из кеша
Чтобы получить ресурс из кэша, просто передайте ключ вашего ресурса (String в этом примере)
public Bitmap getResourceFromMemoryCache(String key) {
memoryCache.get(key);
}