关于Glide为图片添加签名的signature方法,EaseUI头像显示优化

最近在项目的好友列表,个人头像,还有聊天界面的双方头像的加载都使用了Glide库。

Glide有着强大的缓存功能,所以容易发生了不能及时更新头像的情况,(图片URL没变,但内容已经改变,Glide认为这是同一张图片,便不会再次去网络加载而是使用缓存).

根据以上描述有两种解决办法:1.禁用Glide缓存功能,例如skipMemoryCache方法和diskCacheStrategy方法。这种方式使用于本地图片,例如在设置个人头像的时候。

                                                   2.   告诉Glide这是一张不同的图片,要重新加载,更改图片URL是不太现实的想法,所以通过signature方法来为图片签名,方法要传入一个StringSignature对象,构造方法要传入一个字符串,通过字符串来标识签名。网络上有许多类似于signature(new StringSignature(String.valueOf(System.currentTimeMillis())))取得系统时间作为标识或者生成一个随机数标识,其这种方式和禁用缓存没有什么区别,例如listview中的item被完全遮挡后在此加载时,glide会再次根据新签名从服务器加载图片,结果图片显示速度慢,流量消耗大,也对服务器造成了一些不必要的压力。最好的方式应该在知道图片已经更改后在加载时对图片进行签名,例如大部分listview都对应着一个刷新列表的功能,在你觉得合适的一个工具类中添加成员变量long mills初始化为0,在你的listview刷新后修改mills的值,使用mills对图片签名这样就不会造成拉动listview图片反复加载的情况。


EaseUI的ChatFrament中在用户修改头像后不能及时更新,如果禁用缓存或进行快速签名会导致列表稍微滑动或软键盘弹起后头像重新加载的情况,可以修改EaseUser源码添加成员变量private long mills并生成对应set get 方法,在设置provider的时候传入一个tag可以为系统时间可以为随机数,在EaseUserUtil的setUserAvatar方法中对头像图片进行签名,这样在下次打开聊天界面的时候就会重新去服务器加载,而在聊天过程中头像则一直使用缓存


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值