Glide:如何查找图像是否已缓存并使用缓存版本?

时间:2015-09-04 20:57:47

标签: android image-caching android-glide

情景

我有一个大型GIF图像,我希望在用户首次使用Glide - 图像加载和缓存库打开应用时进行缓存。在用户打开应用程序之后,我想显示缓存版本(如果存在)。此GIF URL将在给定间隔后过期。当它到期时,我会获取新的GIF URL并显示/缓存该URL以供将来使用。

我尝试了什么:

我在Glide的github页面上浏览了Caching and Cache Invalidation。我还浏览了Google Group线程Ensuring That Images Loaded Only Come From Disk Cache,其中显示了如何获取图像格式缓存。我也经历了How to invalidate Glide cache for some specific images问题。

从上面的链接中我看到以下代码片段,其中显示了如何从缓存加载图像。但是,这只会尝试从缓存中获取图像。如果它不存在于缓存中,它不会尝试从网络中获取并失败:

Glide.with(TheActivity.this)
        .using(new StreamModelLoader<String>() {
            @Override
            public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
                return new DataFetcher<InputStream>() {
                    @Override
                    public InputStream loadData(Priority priority) throws Exception {
                        throw new IOException();
                    }

                    @Override
                    public void cleanup() {
                    }

                    @Override
                    public String getId() {
                        return model;
                    }

                    @Override
                    public void cancel() {
                    }
                };
            }
        })
       .load("http://sampleurl.com/sample.gif")
       .diskCacheStrategy(DiskCacheStrategy.SOURCE)
       .into(theImageView);

问题:

  1. 是否有更简洁的方法可以实现以下目的:如果存在,则从缓存中显示GIF图像,然后下载GIF,将其缓存以供日后使用并在ImageView中显示。

  2. 上面的缓存文章提到了以下内容:

      

    实际上,使缓存文件无效的最佳方法是更改   内容更改时的标识符(url,uri,文件路径等)

    当前一个应用程序到期时,服务器会向应用程序发送不同的URL。在这种情况下,我相信旧图像最终会被垃圾收集?有没有办法强制从缓存中删除图像?

  3. 在类似的说明中,有没有办法防止带有特定密钥的图像的垃圾收集(以防止再次下载大文件),然后指示在URL更改时从缓存中删除旧图像

1 个答案:

答案 0 :(得分:1)

 Glide.with(context)
 .load("http://sampleurl.com/sample.gif")
 .skipMemoryCache(true)
 .into(imageView);

您已经注意到我们调用.skipMemoryCache(true)来专门告诉Glide跳过内存缓存。这意味着Glide不会将图像放入内存缓存中。理解这一点很重要,这只会影响内存缓存! Glide仍将利用磁盘缓存来避免对同一图像URL的下一个请求的另一个网络请求。更多内容请阅读此内容 Glide Cache & request optimization

快乐的编码!!