glide緩存無(wú)法更新

問(wèn)題

使用glide加載圖片,glide有緩存,分為內(nèi)存緩存和磁盤緩存,可以通過(guò)diskCacheStrategy設(shè)置不同的緩存策略。具體可以看官方文檔(我使用的是glideV4 國(guó)內(nèi)的介紹還比較少)。但是對(duì)于指定的url的圖片,會(huì)出現(xiàn)服務(wù)器端的圖片已經(jīng)改變,但是本地加載的時(shí)候,glide發(fā)現(xiàn)有緩存,不會(huì)重新從服務(wù)器加載,導(dǎo)致一直顯示老的圖片。

解決

  1. 如果將diskCacheStrategy設(shè)置為NONE,內(nèi)存緩存依然存在??梢栽O(shè)置 skipMemoryCache(true),這樣每次加載都會(huì)從服務(wù)器重新加載。但是這樣耗費(fèi)流量,加重服務(wù)器負(fù)擔(dān)。不好。

  2. 翻閱官方文檔發(fā)現(xiàn)glide有個(gè)signature,就是為了解決這個(gè)問(wèn)題。因?yàn)間lide緩存是采<K, V>鍵值對(duì)存儲(chǔ),如果加載一個(gè)url的圖片,K就是url,url不變,那么緩存V也不會(huì)變。signature的作用就是可以在K上附加一寫Key,也就是我們可以在加載圖片的時(shí)候,存儲(chǔ)一個(gè)表明當(dāng)前版本的時(shí)間戳,當(dāng)更新時(shí),改變時(shí)間戳,時(shí)間戳改變也就是K改變,那么就會(huì)重新加載圖片。

    具體實(shí)現(xiàn)如下:

    加載圖片,根據(jù)sp時(shí)間戳添加signature

      GlideApp.with(view.getContext())
                    .load(AppConstants.URL_USER_HEAD + uid)
                    .signature(new ObjectKey(SPUtils.getInstance(AppConstants.SP_NAME_USER).getString("head_signature", "")))
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
                    .placeholder(R.drawable.user_default_head)
                    .error(R.drawable.user_default_head)
                    .into(view);
    
    

    更新圖片時(shí),同時(shí)更新sp的時(shí)間戳:

    SPUtils.getInstance(AppConstants.SP_NAME_USER)
            .put("head_signature",String.valueOf(System.currentTimeMillis()));
            
    

    這里有個(gè)不知道是不是問(wèn)題的問(wèn)題,每次加載都要讀取sp,可能會(huì)有影響。

  3. 注意官方文檔有一句話

    Urls - Although the best way to invalidate urls is to make sure the server changes the url and updates the client when the content at the url changes, you can also use ObjectKey to mix in arbitrary metadata (such as a version number) instead.

    也就是說(shuō)最好的方式就是讓服務(wù)器加一個(gè)時(shí)間戳,可是這樣實(shí)現(xiàn)起來(lái)可能就不是很簡(jiǎn)單。暫時(shí)沒(méi)有嘗試。嘗試了再來(lái)補(bǔ)充。先記下了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡(jiǎn)介 在泰國(guó)舉行的谷歌開(kāi)發(fā)者論壇上,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫(kù),作者是bumptech。這...
    天天大保建閱讀 7,762評(píng)論 2 28
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評(píng)論 25 709
  • Glide的使用 Glide是google開(kāi)發(fā)用于Android加載媒體的類庫(kù),包括圖片,gif,video,已經(jīng)...
    敖大膽閱讀 7,998評(píng)論 2 17
  • 今天的“問(wèn)答”主要內(nèi)容是:給重要的知識(shí)“賦予重要意義”比堅(jiān)持更有效果。就拿我本人來(lái)說(shuō),跑步從3年開(kāi)始跑,開(kāi)始時(shí)興趣...
    24隊(duì)幸福指數(shù)88閱讀 288評(píng)論 0 0
  • 漢高祖 劉邦《大風(fēng)歌》:“大風(fēng)起兮云飛揚(yáng),威加海內(nèi)兮歸故鄉(xiāng),安得猛士兮守四方” 周亞夫平定 吳楚七國(guó)之亂 漢武帝 ...
    o_o_閱讀 488評(píng)論 0 0

友情鏈接更多精彩內(nèi)容