【问题标题】:BitmapLruCache for Volley Calculating the cache size?用于 Volley 的 BitmapLruCache 计算缓存大小?
【发布时间】:2013-08-03 04:00:23
【问题描述】:

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

}

【问题讨论】:

  • 有人可以评论一下 maxMemory/8 的推理吗?
  • Bitmap Cache使用最大内存的1/8的逻辑是什么?

标签: android android-volley


【解决方案1】:

计算占用屏幕大小的位图的大小,我认为这就是您要查找的内容,并将其中三个位图存储在设置大小的 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 个位图的需要,因此占用了可以在其他地方使用的内存你的申请。如果你只打算将 LRUCache 用于 3 个屏幕大小的位图,你可能会更好地使用我上面的计算来计算大小。
猜你喜欢
  • 2018-09-26
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2013-05-16
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多