【发布时间】:2015-12-01 02:38:22
【问题描述】:
场景:
我有一个大的 GIF 图像,我想在用户第一次使用 Glide - 图像加载和缓存库打开应用程序时对其进行缓存。之后,每当用户打开应用程序时,我想显示缓存版本(如果存在)。此 GIF URL 将在给定时间间隔后过期。当它过期时,我会获取新的 GIF 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);
问题:
-
是否有更简洁的方法来实现以下目标:如果存在,则从缓存中显示 GIF 图像,否则下载 GIF,将其缓存以供以后使用并在
李>ImageView中显示。 -
上面的缓存文章提到了以下内容:
实际上,使缓存文件无效的最佳方法是更改 内容更改时的标识符(url、uri、文件路径等)
当前一个 URL 过期时,服务器会向应用发送不同的 URL。在这种情况下,我相信旧图像最终会被垃圾收集?有没有办法强制从缓存中删除图像?
在类似的说明中,有没有办法阻止具有特定键的图像的垃圾收集(以防止再次下载大文件),然后在 URL 更改时指示从缓存中删除旧图像?
【问题讨论】:
标签: android image-caching android-glide