Universal Image Loader: Can I use cache but also refresh it?

后端 未结 3 429
眼角桃花
眼角桃花 2020-12-16 04:20

I\'m loading dynamically generated images so I always want them to be up to date. But they take time to load so I also want to display a cached version while the updated one

3条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-16 05:00

    So in the end I used an ImageLoadingListener as follows:

    onLoadingStarted: Check for cache when loading starts.

    onLoadingComplete: If no cache was found then do nothing. The request will be sent to network and cache will be updated naturally. Otherwise clear cache and call displayImage again (no listener needed this time). The cached image will be shown in the view normally. Moreover, when the 2nd loading finishes, view and cache will be updated.

    ImageLoader.getInstance().displayImage(imageUri, view, new SimpleImageLoadingListener() {
                boolean cacheFound;
    
                @Override
                public void onLoadingStarted(String url, View view) {
                    List 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);
                    }
                }
            });
        }
    

提交回复
热议问题