Android
LruCache
Szukaj…
Uwagi
Powinieneś używać Lru Cache w aplikacjach, w których powtarzalne ładowanie zasobów wpłynęłoby na płynne działanie aplikacji. Na przykład galeria zdjęć z dużymi miniaturami (128 x 128).
Zawsze uważaj na rozmiar pamięci podręcznej Lru, ponieważ ustawienie jej zbyt wysoko może mieć wpływ na aplikację.
Gdy pamięć podręczna Lru nie jest już użyteczna, unikaj przechowywania do niej jakichkolwiek odniesień, aby Garbage Collector mógł wyczyścić ją z pamięci.
Aby uzyskać najlepszą wydajność, pamiętaj, aby ładować zasoby, takie jak mapy bitowe, stosując najlepsze praktyki, takie jak wybranie odpowiedniego inSampleSize przed dodaniem go do pamięci podręcznej Lru.
Inicjowanie pamięci podręcznej
Pamięć podręczna Lru będzie przechowywać wszystkie dodane zasoby (wartości) w celu szybkiego dostępu, dopóki nie osiągnie limitu pamięci, w którym to przypadku upuści rzadziej używane zasoby (wartości), aby zapisać nowy.
Aby zainicjować pamięć podręczną Lru, musisz podać maksymalną wartość pamięci. Ta wartość zależy od wymagań aplikacji i od tego, jak ważny jest zasób, aby zapewnić płynne korzystanie z aplikacji. Na przykład zalecaną wartością galerii obrazów byłoby 1/8 maksymalnej dostępnej pamięci.
Zauważ też, że Lru Cache działa na zasadzie klucz-wartość. W poniższym przykładzie kluczem jest String
a wartością jest 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();
}
};
Dodawanie mapy bitowej (zasobu) do pamięci podręcznej
Aby dodać zasób do pamięci podręcznej, musisz podać klucz i zasób. Najpierw upewnij się, że wartość nie znajduje się już w pamięci podręcznej
public void addResourceToMemoryCache(String key, Bitmap resource) {
if (memoryCache.get(key) == null)
memoryCache.put(key, resource);
}
Pobieranie mapy bitowej (Resouce) z pamięci podręcznej
Aby uzyskać zasób z pamięci podręcznej, wystarczy przekazać klucz zasobu (w tym przykładzie ciąg znaków)
public Bitmap getResourceFromMemoryCache(String key) {
memoryCache.get(key);
}