Android LruCache 缓存大小参数

标签 android android-lru-cache

我正在尝试遵循有关 LruCache 使用的 2 年历史的 android 教程,到目前为止我在 Google 上搜索的一些示例具有相同的方法,即传递一个转换为 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);

然而,从谷歌的文档中,传递的 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();
   }
}

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

最佳答案

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

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

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

关于Android LruCache 缓存大小参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747158/

相关文章:

android - 加载android时EditTextPreference总是显示默认摘要

java - 无法从 Firebase 下载照片 - 空白 ImageView

android - 用户打字时如何避免 EditText 上的多个触发器?

android - 是否可以更改 picasso 用于图像的缓存大小?

android - 使用 LruCache 缓存图像

android - 图像链接存储在sqlite DB中,如何缓存

android - 如何禁用轨迹球?

java - Android java.lang.RuntimeException : Unable to instantiate activity ComponentInfo com. aksitrewari.gateexampreparation.MyActivity

android - LruCache 返回 null

java - Android LRU 缓存未显示正确的位图?