场景:
我有一个大的GIF图像,我想缓存第一次用户使用滑行 -图像加载和缓存库打开应用程序。之后,每当用户打开应用程序,我想显示缓存的版本,如果有。此GIF URL将在给定间隔后过期。当它到期时,我将获取新的GIF URL并显示/缓存它以供将来使用。
我尝试了什么:
我在幻灯片的github页面上浏览了缓存与缓存失效。我还浏览了Google线程确保加载的图像仅来自磁盘缓存,它展示了如何获取图像表单缓存。我还讨论了如何使特定图像的Glide缓存失效的问题。
从上面的链接中,我看到了下面的代码片段,它显示了如何从缓存加载图像。但是,这只会尝试从缓存中获取图像。如果它不在缓存中,则不会尝试从网络获取,并且失败:
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);
问题:
ImageView
中显示它。当上一个URL过期时,服务器会向应用程序发送不同的URL。在这种情况下,我相信旧的形象最终会被垃圾收集吗?有办法强制从缓存中删除图像吗?
发布于 2015-09-09 07:16:24
您的代码将防止幻灯片下载GIF,并且只有在GIF已经被缓存时才会显示GIF,这听起来像是您不想要的。
发布于 2017-11-01 03:30:13
Glide.with(context)
.load("http://sampleurl.com/sample.gif")
.skipMemoryCache(true)
.into(imageView);
您已经注意到,我们调用了.skipMemoryCache(true),专门告诉Glide跳过内存缓存。这意味着幻灯片将不会将图像放在内存缓存中。重要的是要理解,这只会影响内存缓存!滑动仍然将利用磁盘缓存,以避免另一个网络请求下一个请求到相同的图像URL.for更多地读取此滑动缓存&请求优化。
编码愉快!!
https://stackoverflow.com/questions/32406489
复制相似问题