Sho*_*uri 25 android image-caching android-glide
场景:
我有一个大的GIF图像,我想在用户首次使用Glide - 图像加载和缓存库打开应用程序时缓存.在用户打开应用程序之后,我想显示缓存版本(如果存在).此GIF URL将在给定间隔后过期.当它到期时,我会获取新的GIF URL并显示/缓存该URL以供将来使用.
我尝试了什么:
我在Glide的github页面上浏览了Caching和Cache Invalidation.我还去了谷歌集团的线程确保加载的图像仅来自磁盘缓存,它显示了如何获取图像格式缓存.我还经历了如何使某些特定图像问题的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);
Run Code Online (Sandbox Code Playgroud)
问题:
是否有更简洁的方法来实现以下功能:如果存在,则从缓存中显示GIF图像,然后下载GIF,将其缓存以供以后使用并在中显示ImageView.
上面的缓存文章提到了以下内容:
实际上,使缓存文件无效的最佳方法是在内容更改时更改标识符(url,uri,文件路径等)
当前一个应用程序到期时,服务器会向应用程序发送不同的URL.在这种情况下,我相信旧图像最终会被垃圾收集?有没有办法强制从缓存中删除图像?
在类似的说明中,有没有办法防止具有特定键的图像的垃圾收集(以防止再次下载大文件),然后指示在URL更改时从缓存中删除旧图像?
Sam*_*udd 34
如果存在,您不需要自定义ModelLoader来显示缓存中的GIF,否则就会获取它,这实际上是Glide的默认行为.只需使用标准负载线就可以正常工作:
Glide.with(TheActivity.this)
.load("http://sampleurl.com/sample.gif")
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(theImageView);
Run Code Online (Sandbox Code Playgroud)您的代码将阻止Glide下载GIF,并且只有在已经缓存的情况下才显示GIF,这听起来是您不想要的.
是的,旧图像最终将被删除.默认情况下,Glide使用LRU缓存,因此当缓存已满时,将删除最近最少使用的图像.如果需要,您可以轻松自定义缓存大小以帮助实现此目的.有关如何更改缓存大小的信息,请参阅" 配置 Wiki"页面.
不幸的是,没有任何方法可以直接影响缓存的内容.您不能显式删除项目,也不能强制保留项目.在实际使用适当的磁盘高速缓存大小时,通常无需担心这两种情况.如果您经常显示图像,则不会被逐出.如果您尝试缓存其他项目并且缓存中的空间不足,则会自动逐出旧项目以腾出空间.
| 归档时间: |
|
| 查看次数: |
33020 次 |
| 最近记录: |