glide等圖片緩存框架替換緩存圖片解決方案

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

相關文章
相關標籤/搜索