如何计算位图大小?我的理解是它应该支持来自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);
}
}
答案 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;
由此,您应该能够计算出存储这些位图所需的缓存大小。