Android Glide資料更新及記憶體緩衝、硬碟緩衝清理

來源:互聯網
上載者:User

標籤:relative   ext   java   sid   copy   important   gif   硬碟   init   

[轉] 原文 

 

                                        Android Glide資料更新及記憶體緩衝、硬碟緩衝清理

Android的Glide在載入圖片時候內部預設使用了緩衝機制,Glide的緩衝機制分為兩級,第一級是記憶體緩衝,然後第二級是硬碟緩衝。緩衝的過程首先是在記憶體中緩衝,然後將載入的圖片資源緩衝到硬碟,這樣就可以在隨後的再次載入中使用緩衝了,Glide使用緩衝時候首先要檢查記憶體這一層級是否緩衝了相應的緩衝,如果有,則直接使用,如果沒有,則深入到硬碟緩衝中檢查是否有,如果有,則載入之,如果到這一步驟還沒有,那麼就只能作為一個全新的資源載入了。
從這個過程中,Glide使用緩衝無疑大大提高了上層代碼的效能,但是,有些情況下,這種緩衝策略則可能並不適用。比如,APP中有一個頭像,該頭像是從一個固定連結http://xxx.xxx.jpg讀取,假設代碼第一次讀取後,緩衝到了本地。然而,幾分鐘後該圖片更新了,但是連結仍然是http://xxx.xxx.jpg。隨後,假設,三小時或三天或三十天后同樣的連結http://xxx.xxx.jpg讀取,此時Glide載入時候檢查緩衝,發現針對http://xxx.xxx.jpg的資源已經緩衝,那麼Glide不再從伺服器讀取,而是直接載入本機快取使用,這樣就造成了Glide載入出來的圖片資源不是最新的。
總結:Glide的緩衝機制雖然提升了效能,但是如果針對固定資源路徑的請求,將導致請求得到的資源是緩衝的,這樣就不能保證最新。換句話說,如果給定資源地址下的資源的頻繁更新的,而資源地址是固定,則Glide此時的緩衝策略就顯得不太合適。
導致這種問題的原因有二:
一, Glide本身使用了緩衝。
二, Glide在緩衝資源使用<K,V>索引值對模型,如果每次都使用http://xxx.xxx.jpg這個URL,那麼鍵相同,意味著Glide匹配鍵時候,永遠可以從緩衝中返回鍵對應的值。

針對這個問題的解決方案:
解決方案1:
從Glide提供的緩衝索引值對<K,V>結構模型入手,重寫緩衝的<K,V>索引值策略,就可以避免相同資源地址下資源更新問題了,但是這種方案實現比較複雜,也無十分必要。不推薦,除非必需。

解決方案2:
Glide.get(this).clearMemory();
清理記憶體中的緩衝。

Glide.get(this).clearDiskCache();
清理硬碟中的緩衝。

以上兩個方法清除全域的記憶體緩衝和硬碟緩衝,雖然可以一勞永逸的解決緩衝導致的資源陳舊問題,但是將嚴重影響全域效能,所以慎用,除非是在APP整體要做全新的開始或者恢複原始狀態,否則盡量避免使用。

解決方案3(推薦):
代碼形如:

[java] view plain copy
  1. ImageView image= (ImageView) findViewById(R.id.image);  
  2.         Glide.with(this).load("http://avatar.csdn.net/9/7/A/1_zhangphil.jpg")  
  3.                 .skipMemoryCache(true)  
  4.                 .diskCacheStrategy(DiskCacheStrategy.NONE)  
  5.                 .into(image);  

關鍵代碼:skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)
skipMemoryCache(true) ,跳過記憶體緩衝。
diskCacheStrategy(DiskCacheStrategy.NONE) ,不要在disk硬碟中緩衝。

這兩個函數同時聯合使用,使得Glide針對這一次的資源載入放棄記憶體緩衝和硬碟緩衝,相當於一次全新的請求。這樣就迫使Glide從給定的資源地址發起全新的資料載入,而非從舊有的緩衝中取緩衝使用。

附錄:
1,《Android圖片載入與緩衝開源架構:Android Glide》連結:http://blog.csdn.net/zhangphil/article/details/45535693 
2,《Android Glide載入圖片時轉換為圓形、圓角、毛玻璃等圖片效果》連結:http://blog.csdn.net/zhangphil/article/details/52806374 

Android Glide資料更新及記憶體緩衝、硬碟緩衝清理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.