通用图像加载器:我可以使用caching,但也刷新它?

我加载dynamic生成的图像,所以我总是希望他们是最新的。 但他们需要时间来加载,所以我也想显示一个caching的版本,而更新的一个不来。 通用图像加载器如何做到这一点?

更具体地说,当我调用“displayImage”时,我希望它执行以下操作:

  1. 如果存在caching的图像,则立即显示。
  2. 无论如何开始从给定的url下载。
  3. 加载完成后,在视图中显示replacecaching的图像。
  4. 更新caching。

  • Android Web-View:将本地Javascript文件注入到远程网页
  • 齐射图像caching
  • 如何清除Android WebView的(CSS)访问历史logging?
  • Google音乐在哪里储存“离线曲目”?
  • Android - 如何从Fresco磁盘caching中获取图像文件?
  • 播放stream时如何避免在Android媒体播放器中进行15秒的延迟/caching
  • 使用Picasso与自定义磁盘caching
  • Androidanimation减less口吃/断断续续/滞后
  • 所以最后我使用了一个ImageLoadingListener,如下所示:

    onLoadingStarted:加载开始时检查caching。

    onLoadingComplete:如果没有findcaching,则什么都不做。 请求将被发送到networking和caching将自然更新。 否则清除caching并再次调用displayImage(这次不需要监听器)。 caching的图像将正常显示在视图中。 而且,当第二次加载完成时,查看和caching将被更新。

    ImageLoader.getInstance().displayImage(imageUri, view, new SimpleImageLoadingListener() { boolean cacheFound; @Override public void onLoadingStarted(String url, View view) { List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(url, ImageLoader.getInstance().getMemoryCache()); cacheFound = !memCache.isEmpty(); if (!cacheFound) { File discCache = DiscCacheUtils.findInCache(url, ImageLoader.getInstance().getDiscCache()); if (discCache != null) { cacheFound = discCache.exists(); } } } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (cacheFound) { MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache()); DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache()); ImageLoader.getInstance().displayImage(imageUri, (ImageView) view); } } }); } 

    您可以使用ImageLoadingListener。 这个接口有4个方法来覆盖:onLoadingStarted,onLoadingFailed,onLoadingComplete,onLoadingCancelled。 在onLoadingStarted你可以使图像caching一个,然后完成你改变它。

    所以这个电话看起来像这样:

     imgLoader.displayImage(url, myImageView,new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { //Display cached image if it exists } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { // TODO Auto-generated method stub } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { ((ImageView)arg1).setBitmapImage(arg2); } @Override public void onLoadingCancelled(String arg0, View arg1) { // TODO Auto-generated method stub } });