一个有着有限数量强引用的缓存机制。访问其中的值时会将值移动到队列的头部,当缓存池满的时候,该队列末尾的值将被删除并且可能会被垃圾回收。

想要明确释放某个特定的值,可以复写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,将会返回空指针异常。

results matching ""

    No results matching ""