android-volley如何实现图像缓存?

android-volley如何实现图像缓存?,android,caching,android-volley,Android,Caching,Android Volley,据我所知,我们需要提供lrucache的实现,并将其作为构造函数传递给映像加载程序 volley中还有一个默认的基于磁盘的缓存。此基于磁盘的缓存用于缓存HTTP响应 **下载的图像包含缓存头时将使用哪个缓存 LRU(自行实施) volley工具箱包中存在默认磁盘缓存实现*强文本***到 公共类BitmapLruCache扩展LruCache实现ImageLoader.ImageCache { 这是用于在网络视图中设置映像的调用 ImageLoader mImageLoader = new

据我所知,我们需要提供
lrucache
的实现,并将其作为构造函数传递给映像加载程序

volley
中还有一个默认的基于磁盘的缓存。此基于磁盘的缓存用于缓存
HTTP
响应

**下载的图像包含缓存头时将使用哪个缓存

  • LRU(自行实施)
  • volley工具箱包中存在默认磁盘缓存实现*强文本***到 公共类BitmapLruCache扩展LruCache实现ImageLoader.ImageCache
  • {

    这是用于在网络视图中设置映像的调用

    ImageLoader mImageLoader = new          ImageLoader(ApplicationController.getInstance().getRequestQueue(), new BitmapLruCache());
     holder.imageicon.setImageUrl(i.getThumb_image(), mImageLoader);
    

    LRU缓存用于缓存图像。请参阅源代码-使用
    ImageCache
    ,这是一个接口截图,可供您在扩展的
    LruCache
    中实现。因此,您的缓存将扩展
    LruCache
    并实现
    ImageCache

    volley提供的默认缓存用于它获得的每个响应,根据HTTP响应的缓存头使用默认的缓存策略。因此,如果它们有正确的缓存头,它们将被缓存在磁盘上,如果没有,它们将不会


    因此,为了完整地回答您的问题,可能会同时使用两个缓存——但就检索图像而言,内存缓存(或lru缓存)将被使用。

    我得到了那个部分。.当图像url包含缓存头时,将使用哪个缓存?如果您查看我链接的源代码,您将看到ImageCache是从ImageLoader类中使用的,正如我已经说过的,这是您的LruCache的实现。如果您的LruCache中缺少,HTTP请求将转到off如预期的那样,然后它会检查HTTP缓存,然后如果没有找到,请转到网络。好的,谢谢你收到了…但在我的情况下,LRU缓存中没有缓存命中…所有图像都显示在基于光盘的缓存中…你知道什么时候发生了吗?我已经编辑了我的帖子,其中包含了LRU implem的源代码entationYou是否为每个ImageLoader实例创建新缓存?这可能就是您没有获得预期命中率的原因。我通常设置CacheManager类,在应用程序启动时初始化ImageLoader和ImageCache的单个实例,然后仅通过静态单例访问它们。从上两个实例的外观来看在代码中,您正在为创建的每个imageloader创建一个新缓存。
    ImageLoader mImageLoader = new          ImageLoader(ApplicationController.getInstance().getRequestQueue(), new BitmapLruCache());
     holder.imageicon.setImageUrl(i.getThumb_image(), mImageLoader);