0

如何计算位图大小?我的理解是它应该支持 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);
}

}
4

1 回答 1

2

要计算占用屏幕大小的位图的大小,我认为这就是您要查找的内容,并将其中三个位图存储在设置大小的 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;

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

于 2013-08-02T02:06:04.317 回答