概述
发现问题
今天测试提了一个bug,说Android图片显示的和IOS不一样,于是我就看了下代码,发现字段和IOS用的是一样的啊,这就让我感到很郁闷了。于是我仔细看了下接口返回的图片地址发现地址有点奇怪,图片的地址是https://sxbkj-test.oss-cn-hangzhou.aliyuncs.com/shop/public/bg.png
,这个图片地址的命名是以bg.png
命名的,公司的图片一向是以XX-时间戳.png
命名的呀。我问了下服务器的同事,他说这个地址是不会变的,就算更换了图片地址也不会变。由此可以断定加载图片时都是用的缓存中的图片,就算服务器换了新的图片也不会显示新的图片。
原因及解决方法
由于Glide磁盘缓存是散列键,所以很难删除在磁盘上的所有的对应特定的URL或者文件路径的缓存文件。Glide的缓存都是根据文件的名字生成对应的唯一标识符,如果两个图片的地址一样就不会重新缓存文件。Glide提供了signature()API和额外的数据,使您可以控制缓存键。签名适用于媒体存储内容,以及任何您可以维护版本的元数据。
- 媒体存储内容:对于媒体存储内容,您可以使用Glide的MediaStoreSignature类作为您的签名。MediaStoreSignature允许您添加数据的修改日期时间,文件类型,和一个媒体存储项目为缓存键定位。这三个属性可靠的捕获编辑和更新,从而允许您缓存媒体存储缩略图。
- 文件:您可以使用ObjectKey添加文件日期修改时间。
- URL:虽然使URL失效最好的方式是确保服务器改变URL并且URL指代的内容改变时更新客户端。您可以使用Objectkey添加任意的元数据(如版本号)代替。
Glide.with(activity)
.load(url)
.signature(ObjectKey(Util.getAppVersionCode()))//我这里以版本号为元数据
.into(imageView)
测试
- 运行程序,加载图片后生成缓存(第二个箭头所指向的文件)
- 修改版本号运行,加载图片生成一个新的缓存(第一个箭头所指向的文件)
参考文章
最后
以上就是灵巧鱼为你收集整理的Glide自定义缓存失效之signature的全部内容,希望文章能够帮你解决Glide自定义缓存失效之signature所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复