Android LruCache 缓存大小参数
Android LruCache cache size parameter
我正在尝试遵循 android 上关于 LruCache 用法的 2 年前的教程,到目前为止我用谷歌搜索的一些示例具有相同的方法,即传递一个转换后的值(int)到 KiB。
final int maxMemory = (int)(Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8; //use 1/8th of what is available
imageCache = new LruCache<>(cacheSize);
然而,从 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();
}
}
我想知道哪个是正确的计量单位。
任何答案将不胜感激..
LruCache使用方法sizeOf
判断当前缓存的大小,以及缓存是否满。 (即,sizeOf
对缓存中的每个项目调用并相加以确定总大小)。因此,构造函数的正确值取决于 sizeOf
.
的实现
默认情况下,sizeOf
总是returns 1,这意味着构造函数中指定的int maxSize
只是缓存可以容纳的项目数。
在示例中,sizeOf
已被覆盖为 return 每个位图中的字节数。因此,构造函数中的 int maxSize
是缓存应容纳的最大字节数。
您关注的内容来自https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
如您所见,基本原理是 LruCache
需要一个 int。因为内存可能太大而无法用 int 来寻址字节,所以它考虑使用千字节来代替。所以:
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory / 8;
而且,在同样的训练中,
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount() / 1024;
}
位图的大小也以千字节表示。
在class文档中,作者使用bytes是因为4.2^20适合一个int。
我正在尝试遵循 android 上关于 LruCache 用法的 2 年前的教程,到目前为止我用谷歌搜索的一些示例具有相同的方法,即传递一个转换后的值(int)到 KiB。
final int maxMemory = (int)(Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8; //use 1/8th of what is available
imageCache = new LruCache<>(cacheSize);
然而,从 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();
}
}
我想知道哪个是正确的计量单位。 任何答案将不胜感激..
LruCache使用方法sizeOf
判断当前缓存的大小,以及缓存是否满。 (即,sizeOf
对缓存中的每个项目调用并相加以确定总大小)。因此,构造函数的正确值取决于 sizeOf
.
默认情况下,sizeOf
总是returns 1,这意味着构造函数中指定的int maxSize
只是缓存可以容纳的项目数。
在示例中,sizeOf
已被覆盖为 return 每个位图中的字节数。因此,构造函数中的 int maxSize
是缓存应容纳的最大字节数。
您关注的内容来自https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
如您所见,基本原理是 LruCache
需要一个 int。因为内存可能太大而无法用 int 来寻址字节,所以它考虑使用千字节来代替。所以:
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory / 8;
而且,在同样的训练中,
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount() / 1024;
}
位图的大小也以千字节表示。
在class文档中,作者使用bytes是因为4.2^20适合一个int。