Android
Pamięć podręczna map bitowych
Szukaj…
Wprowadzenie
Buforowanie bitmap efektywne pod względem pamięci: Jest to szczególnie ważne, jeśli aplikacja korzysta z animacji, ponieważ zostaną one zatrzymane podczas czyszczenia GC i sprawią, że aplikacja będzie dla użytkownika powolna. Pamięć podręczna umożliwia ponowne użycie obiektów, których tworzenie jest kosztowne. Jeśli załadujesz obiekt do pamięci, możesz pomyśleć o tym jako o pamięci podręcznej dla obiektu. Praca z bitmapą w Androidzie jest trudna. Ważniejsze jest buforowanie bimapy, jeśli zamierzasz jej używać wielokrotnie.
Składnia
-
LruCache<String, Bitmap> mMemoryCache;//declaration of LruCache object.
- void addBitmapToMemoryCache (Klucz łańcucha, bitmapa bitmapowa) {} // deklaracja ogólnej metody dodawania bitmapy do pamięci podręcznej
- Bitmapa getBitmapFromMemCache (klucz string) {} // deklaracja ogólnej metody pobierania bimapy z pamięci podręcznej.
Parametry
Parametr | Detale |
---|---|
klucz | klucz do przechowywania bitmapy w pamięci podręcznej |
bitmapa | wartość bitmapy, która będzie buforowana w pamięci |
Pamięć podręczna map bitowych za pomocą pamięci podręcznej LRU
Pamięć podręczna LRU
Poniższy przykładowy kod demonstruje możliwą implementację klasy LruCache do buforowania obrazów.
private LruCache<String, Bitmap> mMemoryCache;
Tutaj wartość ciągu jest kluczem do wartości mapy bitowej.
// Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. Stored in kilobytes as LruCache takes an
// int in its constructor.
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory / 8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount() / 1024;
}
};
Aby dodać mapę bitową do pamięci podręcznej
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
mMemoryCache.put(key, bitmap);
}
}
Aby uzyskać bitmapę z pamięci podręcznej
public Bitmap getBitmapFromMemCache(String key) {
return mMemoryCache.get(key);
}
Aby załadować bitmapę do podglądu obrazu, wystarczy użyć getBitmapFromMemCache („klucz dostępu”).