Android 用于凌空计算缓存大小的BitmapLruCache?

Android 用于凌空计算缓存大小的BitmapLruCache?,android,android-volley,Android,Android Volley,如何计算位图大小?我的理解是,它应该支持截击上谷歌I/O演示文稿的三个全屏。有人知道我如何计算任何Android设备上三个全屏的内存大小吗?我想这是指内存缓存,所以是位图缓存,但不确定 现在我看到了下面的计算建议,但不确定这是否与将三个屏幕的数据缓存在内存中一致 final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 8; 更新:将总内存

如何计算位图大小?我的理解是,它应该支持截击上谷歌I/O演示文稿的三个全屏。有人知道我如何计算任何Android设备上三个全屏的内存大小吗?我想这是指内存缓存,所以是位图缓存,但不确定

现在我看到了下面的计算建议,但不确定这是否与将三个屏幕的数据缓存在内存中一致

 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);
}

}
导入android.graphics.Bitmap;
导入android.support.v4.util.LruCache;
导入com.android.volley.toolbox.ImageLoader.ImageCache;
公共类LruBitmapCache扩展LruCache实现ImageCache{
公共LruBitmapCache(int-maxSize){
超级(最大尺寸);
}
@凌驾
受保护的int-sizeOf(字符串键、位图值){
返回值.getRowBytes()*value.getHeight();
}
@凌驾
公共位图getBitmap(字符串url){
返回get(url);
}
@凌驾
公共位图(字符串url、位图){
put(url、位图);
}
}

要计算占用屏幕大小的位图的大小(我猜这就是您要查找的),并将其中三个位图存储在一个与这些位图占用的内存相对应的设置大小的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;

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

每像素最多4字节吗?有没有每像素使用超过4个字节的格式?据我所知,Android没有。在Android平台上,我唯一想到的两个是ARGB_8888和RGB_565,它们每像素有4个字节。你怎么能将使用总内存的1/8与使用3个屏幕的内存缓存进行比较呢?如果你使用1/8的内存,那部分内存将专用于你的LRUCache,这可能比3个位图所需的更多,因此占用了应用程序中其他地方可以使用的内存。如果您只打算对3个屏幕大小的位图使用LRUCache,您可能最好使用我上面的计算来计算大小。有人可以对maxMemory/8推理发表意见吗?使用1/8的最大内存进行位图缓存的逻辑是什么?