Android LruCache 缓存大小参数

Rei*_*Rei 6 android android-lru-cache

我正在尝试遵循关于 LruCache 使用的 2 年前的 android 教程,到目前为止我在谷歌上搜索的一些示例具有相同的方法,即传递一个转换为 KiB 的值(int)。

final int maxMemory = (int)(Runtime.getRuntime().maxMemory() / 1024); 
final int cacheSize = maxMemory / 8; //use 1/8th of what is available
imageCache = new LruCache<>(cacheSize);
Run Code Online (Sandbox Code Playgroud)

但是,从 Google 的文档中获取,传递的 int 值似乎转换为字节(来自 MiB):https : //developer.android.com/reference/android/util/LruCache.html

int cacheSize = 4 * 1024 * 1024; // 4MiB
LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) {
   protected int sizeOf(String key, Bitmap value) {
       return value.getByteCount();
   }
}
Run Code Online (Sandbox Code Playgroud)

我想知道哪个是正确的计量单位。任何答案将不胜感激..

che*_*ork 6

LruCache 使用该方法sizeOf来确定缓存的当前大小,以及缓存是否已满。(即,sizeOf在缓存中的每个项目上调用并相加以确定总大小)。因此,构造函数的正确值取决于 的实现sizeOf。

默认情况下,sizeOf始终返回 1,这意味着int maxSize构造函数中指定的只是缓存可以容纳的项目数。

在示例中,sizeOf已被覆盖以返回每个位图中的字节数。因此,int maxSize构造函数中的 是缓存应保存的最大字节数。