应用场景:api
手机app 用户的头像地址 在服务器上是固定的,好比有些服务器喜欢以 用户手机或者用户id 做为惟一标识,那么用户头像地址看起来是这样的:缓存
http://xxx.com/headimage/uid_1233.jpg服务器
在app里从新设置头像以后,因为用户的头像地址是固定的,glide等缓存框架已经缓存了 url对应的图片,那么app的我的中心页面显示的头像仍是原来旧的头像。app
问题分析:框架
1. 若是glide等框架提供相似这样的方法: setCache(String url, Bitmap image) 这样修改头像以后,咱们只须要调用一下这个方法,从新设置url对应的缓存 图片便可。ide
如IOS 版本的图片缓存框架 SDWebImage, 里面有个方法 叫 saveCache:(UIimage*)image forKey:(NSString*)url 这个方法直接替换掉 本 地 以url为 key的缓存图片。ui
惋惜glide我并无找到。this
解决方案:url
对于有些图片框架,没有提供从新设置 url对应的缓存内容的api
这个问题的解决方案是这样的:
xxx.com/image/1.png 和xxx.com/image/1.png ?1469247425923
这2个url 获取到的图片是同样的图片
so,当你app里面更改了图片,而服务器里图片url是固定不变的, 你只须要在你 的url地址后面 加个 ?和一些字符串,如时间戳,那么用这个 新的url 替换你的旧的url,而后用 图片框架从新加载一遍。
例如上面那个例子里:
if(头像上传成功了){ String newURL=BCUtil.reSetHeadImageURL(mySharedPreferences.getUserLoginHeadURL()); mySharedPreferences.saveUserLoginHeadURL(newURL); Glide.with(AccountDetailActivity.this).load( mySharedPreferences.getUserLoginHeadURL()).into(image_head) ; } public static String reSetHeadImageURL(String oldURL) { String newURL; int position = oldURL.indexOf("?"); if (position > 0) { newURL = oldURL.substring(0, position); newURL = newURL + "?" + System.currentTimeMillis(); } else { newURL = oldURL + "?" + System.currentTimeMillis(); } return newURL; }
欢迎加入个人交流群:416157653