根据我的理解,我们需要提供LRU cache
的实现,并将其作为构造函数传递给图像加载器。
volley
中还有一个默认的基于磁盘的缓存。此基于磁盘的缓存用于缓存HTTP
响应。
**下载的图像包含缓存标题时将使用哪个缓存?
{
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public BitmapLruCache() {
this(getDefaultLruCacheSize());
}
public BitmapLruCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}}
这是用于在网络视图中设置图像的调用
ImageLoader mImageLoader = new ImageLoader(ApplicationController.getInstance().getRequestQueue(), new BitmapLruCache());
holder.imageicon.setImageUrl(i.getThumb_image(), mImageLoader);
答案 0 :(得分:0)
LRU缓存用于缓存图像。查看ImageLoader的源代码 - 使用ImageCache
,这是一个界面,可让您在扩展LruCache
中实现。因此,您的缓存会扩展LruCache<String,Bitmap>
并实施ImageCache
。
volley提供的默认缓存用于它获得的每个响应,默认缓存是根据HTTP响应的缓存头进行的。因此,如果它们具有正确的缓存标头,它们将被缓存在磁盘上,如果它们不缓存,则它们不会。
因此,要完整地回答您的问题,可能会使用两个缓存 - 但就检索图像而言,将使用内存缓存(或您的lru缓存)。