volley imageCache和imageRequest都缓存图像

时间:2014-06-23 05:59:48

标签: android caching android-volley image-caching

我使用volley加载我的图像并缓存它们。

mImageLoader = new ImageLoader(getRequestQueue(context), mImageCache);

其中mImageCache是​​DiskLruImageCache。

凌空从ImageRequest获取来自服务器的图片,扩展了ImageRequest<Bitmap>

并且在请求类中有boolean定义是否缓存响应

/** Whether or not responses to this request should be cached. */
private boolean mShouldCache = true;

ImageRequest已禁用mShouldCache

正如您所看到的,默认值为true,因此在volley提取图像后,它会通过diskBasedCache将其缓存在volley缓存目录下。

所以现在我必须从ImageRequest缓存一个位图,从ImageLoader缓存一个,如何禁用ImageRequest缓存?或任何其他建议?

1 个答案:

答案 0 :(得分:2)

您在给ImageLoader磁盘缓存时犯了一个错误。 Volley已经为每个响应提供了共享磁盘缓存,无论是图像不是,默认情况下根据HTTP缓存头工作。

您应该为ImageLaoder提供内存位图缓存。查看文档。

它的原因是Volley的设计方式。这是Volley的图像请求逻辑:

  1. 将带有网址X的图片添加到队列中。
  2. 检查图像内存缓存(由您提供) - 如果可用,请返回位图。的最快
  3. 检查共享磁盘缓存 - 如果可用,请检查缓存标头以查看该映像是否仍然有效。如果有效 - 添加到内存位图缓存并返回。 较慢,但仍然很快
  4. 此步骤表示图像位于磁盘缓存中,但其缓存标头丢失或过期,或者图像根本不在缓存中。无论哪种方式,Volley都会执行网络请求并在两个缓存中缓存响应。的最慢​​
  5. 因此,通过提供磁盘缓存 - 您既可以减慢应用程序的速度,又可以节省多达两倍的磁盘空间,同时节省冗余图像。

    使用内存缓存。