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”).



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow