我正在尝试关注Android上关于LruCache使用的2年教程,到目前为止我用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);
但是,根据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();
}
}
我想知道哪一个是正确的测量单位。 任何答案都将非常感谢..
答案 0 :(得分:3)
LruCache使用方法sizeOf
来确定缓存的当前大小,以及缓存是否已满。 (即,在缓存中的每个项目上调用sizeOf
并将其相加以确定总大小)。因此,构造函数的正确值取决于sizeOf
的实现。
默认情况下,sizeOf
始终返回1,这意味着构造函数中指定的int maxSize
只是缓存可以容纳的项目数。
在示例中,已覆盖sizeOf
以返回每个位图中的字节数。因此,构造函数中的int maxSize
是缓存应该保留的最大字节数。
答案 1 :(得分:1)
您关注的内容来自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;
}
位图的大小也以千字节表示。
在类文档中,作者使用字节,因为4.2 ^ 20适合int。