我使用LruCache读取了一些示例,以实现用于存储位图图像的缓存机制。但即使我已阅读文档http://developer.android.com/reference/android/util/LruCache.html,我仍然不知道如何使用它。
例如,在文档中,它提到了"以用户定义的单位返回键和值的条目大小。"在sizeof()。入门的大小是多少?它是否意味着它允许的条目数,例如,返回10将允许我有10个缓存对象引用。
public class LruBitmapCache extends LruCache<String, Bitmap> implements
ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public LruBitmapCache() {
this(getDefaultLruCacheSize());
}
public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return getByteCount / 1024;
...
在上面的代码中,为什么需要划分1024,它的建议是什么?
另外,构造函数LruBitmapCache(int sizeInKiloBytes),为什么参数声称它的大小以千字节为单位?根据上面的文档,它不应该是字节大小吗?
任何帮助将不胜感激,谢谢!我很困惑......
答案 0 :(得分:3)
LruCache用于缓存有限数量的值。
第一个选项:您希望将x
个元素存储在缓存中,无论它们的内存大小如何。
在这种情况下,您只需创建LruCache
x
作为大小,并且不要覆盖sizeOf
方法。
例如:
// cache 1000 values, independently of the String size
LruCache<Integer, String> idToCustomerName = new LruCache<>(1000);
第二个选项,您希望存储元素,以便所有元素的大小总和不超过给定数量。
在这种情况下,您创建一个LruCache
作为整体大小y
,并覆盖指定缓存中一个元素大小的sizeOf
。
例如:
// cache an undefined number of ids so that the length of all the strings
// do not exceed 100000 characters
LruCache<Integer, String> idToCustomerName = new LruCache<>(100000) {
@Override
protected int sizeOf(Integer key, String value) {
return value.length();
}
};
要回答有关代码的问题,只要maxSize
变量和sizeOf
是相同的单位,缓存中使用的单位就不重要了。
在您的示例中,缓存的内部单位是千字节,这就是您在代码中看到/1024
和/8
的原因,它与getByteCount / 1024;
中的sizeOf
相匹配方法。