用于Volley的BitmapLruCache计算缓存大小?

时间:2013-08-02 01:44:30

标签: android android-volley

如何计算位图大小?我的理解是它应该支持来自Volley的Google I / O演示的三个全屏。有谁知道如何在任何给定的Android设备上计算三个全屏的内存大小?我认为这是指内存缓存所以BitmapCache但不确定。

现在我已经看到了以下计算建议,但不确定这是否与在内存中保存三个屏幕值的数据一致。

 final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
 final int cacheSize = maxMemory / 8;

更新:使用1/8总内存进行缓存的逻辑是什么。这与保持三个屏幕的数据相比如何?

由于

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;

public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageCache {

public LruBitmapCache(int maxSize) {
    super(maxSize);
}

@Override
protected int sizeOf(String key, Bitmap value) {
    return value.getRowBytes() * value.getHeight();
}

@Override
public Bitmap getBitmap(String url) {
    return get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
    put(url, bitmap);
}

}

1 个答案:

答案 0 :(得分:2)

计算占用屏幕大小的位图的大小,我认为这是你正在寻找的,并将这些位图中的三个存储在一个设置大小的LRUCache中,该LRUCache对应于所占用的内存通过这些位图,将是:

// Gets the dimensions of the device's screen
DisplayMetrics dm = context.getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;

// Assuming an ARGB_8888 pixel format, 4 bytes per pixel
int size = screenWidth * screenHeight * 4;

// 3 bitmaps to store therefore multiply bitmap size by 3
int cacheSize = size * 3;

由此,您应该能够计算出存储这些位图所需的缓存大小。