一个有着有限数量强引用的缓存机制。访问其中的值时会将值移动到队列的头部,当缓存池满的时候,该队列末尾的值将被删除并且可能会被垃圾回收。
想要明确释放某个特定的值,可以复写entryRemoved()方法。当然,如果你根据key没有找到相应的缓存,通过复写create()方法也可以返回一个默认的值。
默认情况下,缓存空间的大小是根据队列中的条目数量来决定的。通过覆盖sizeOf()方法,可以以不同单位来调整缓存空间的大小。 例如,下面这段代码中展示了用于缓存位图的缓存空间仅仅为4M。
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();
}
}
该类是线程安全的。 执行多个缓存操作时会自动进行同步处理:
synchronized (cache) {
if (cache.get(key) == null) {
cache.put(key, value);
}
}
该类不允许将null用作键或值。 在调用get(),put()以及remove()方法时,如果键或值为null,将会返回空指针异常。