在使用Glide的进行头像更换的时候发现,当服务器图片资源已经更新,Glide不会重新加载URL,而是从缓存中读取旧的图片资源
解决方法
使用Glide的signature(Key signature)方法,通过创建一个图片修改时间签名,然后在图片更新的时候,更改时间签名,达到重新加载的效果。
注意:旧版本Glide中.signature()方法形参支持使用StringSignature,但在Glide 4.0里面这个方法不仅被移到RequestOptions中,而且形参改为key。但Key有一个使用相对方便的子类ObjectKey,构造方法以Object为参数
-
用户登录时,用sharedprefence存储的用户数据里,加入存储时间参数
// 存储用户数据,UserMessages生成xml的文件名,MODE_PRIVATE是存储的格式 SharedPreferences sp=getSharedPreferences("UserMessage", MODE_PRIVATE); SharedPreferences.Editor editor=sp.edit(); //当前系统时间 editor.putString("updateTime",String.valueOf(System.currentTimeMillis())); editor.commit();
-
用Glide显示图片
//获取系统图片更换时间,若时间改变,Glide会重新加载并缓存新图 String updateTime= sp.getString("updateTime", null); RequestOptions requestOptions=RequestOptions.circleCropTransform() .signature(new ObjectKey(updateTime)); Glide.with(this).load(url).apply(requestOptions).into(iv_icon);
-
更换图像时,修改updateTime参数就可以了
SharedPreferences.Editor editor=sp.edit(); editor.putString("updateTime",String.valueOf(System.currentTimeMillis())); editor.commit();
参考链接
Glide 4.0 StringSignature 找不到类 https://www.jianshu.com/p/ed0993ca1490