Glide自定义缓存失效之signature

发现问题

今天测试提了一个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)

测试

  • 运行程序,加载图片后生成缓存(第二个箭头所指向的文件)
  • 修改版本号运行,加载图片生成一个新的缓存(第一个箭头所指向的文件)

在这里插入图片描述

参考文章

猜你喜欢

转载自blog.csdn.net/ZYJWR/article/details/93530341