應用場景: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