通用映像加载器:我可以使用缓存但是还可以刷新它吗?

Vit*_*uel 8 android caching universal-image-loader

我正在加载动态生成的图像,所以我总是希望它们是最新的.但是它们需要时间来加载所以我也希望显示一个缓存版本,而更新后的版本不会出现.如何使用Universal Image Loader执行此操作?

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

  1. 如果存在缓存的图像,则立即显示.
  2. 无论如何,从给定的URL开始下载.
  3. 图像加载完成后,将其显示在替换缓存图像的视图中.
  4. 更新缓存.

Vit*_*uel 26

所以最后我使用了ImageLoadingListener,如下所示:

onLoadingStarted: 加载开始时检查缓存.

onLoadingComplete: 如果没有找到缓存,则不执行任何操作.请求将被发送到网络,缓存将自然更新.否则清除缓存并再次调用displayImage(这次不需要监听器).缓存的图像将正常显示在视图中.此外,当第二次加载完成时,将更新视图和缓存.

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);
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)