Volley只在内存中缓存图像,但我希望缓存在磁盘和内存中



我用的是这样的凌空抽射。问题是,在我的情况下,Volley只将图像缓存在内存中,而不在磁盘上。如果我强制我的应用程序,所有缓存都将从内存中删除。如何在内存和磁盘上都有缓存?

public ImageLoader getImageLoader() {
        getRequestQueue();
        if (mImageLoader == null) {
            mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache(getApplicationContext()));
        }
        return this.mImageLoader;
    }
holder.picture.setImageUrl(url, MyApplication.getInstance().getImageLoader());

注意:我使用了Jake Wharton编写的DiskLruCache,一切都很好,但这样,缓存只存在于磁盘上。如果存在,我希望Volley从内存中获取位图,如果存在,则从磁盘中获取位图;如果URL没有缓存,则进行网络调用。

Volley首先尝试在LruBitmapCache中查找缓存,您可以在ImageLoader.java 中找到相关代码

Bitmap cachedBitmap = mCache.getBitmap(cacheKey);
if (cachedBitmap != null) {
    // Return the cached bitmap.
    ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null);
    imageListener.onResponse(container, true);
    return container;
}

然后Volley采用与其他http请求相同的方式(不使用ImageLoader)。简而言之,默认情况下使用DiskLruCache。Volley使用CacheDispatcher来处理磁盘上的缓存。缓存策略基于缓存控制和/或来自服务器的其他标头。

据我所知,默认情况下,尽管没有缓存控制或相关的头,截击仍会缓存所有请求。但是,如果不存在此类标头,则不会使用缓存。

如果您不想改变截击的逻辑,可以考虑从服务器端支持Cache。

最新更新