關鍵詞:Bitmap / Cache / 圖片加載 / 采樣率 / ImageLoader /
本次筆記梳理的內容是 Bitmap 的加載和 Cache。加載 Bitmap 需要注意的問題有防止內存溢出、如何高效地加載 Bitmap 等等,對于常用的緩存策略,實際開發中,我們需要用 Bitmap 做緩存,通過緩存我們不需要每次都從網絡上請求圖片或者從存儲設備中加載圖片,極大提高圖片的加載效率以及用戶體驗。 目前常用的緩存策略有:LruCache 和 DiskLruCache,分別對應著 內存緩存 和 存儲緩存,最近最少使用算法:當緩存快滿的時候,淘汰近期最少使用的緩存目標;
關于 LruCache 需要知道的幾點:
是一個泛型類,內部采用了一個 LinkedHashMap 以強引用的方式存儲外界的緩存對象,其提供了 get 和 put 方法來完成緩存的獲取和添加操作,當緩存滿的時候,LruCache 會移除較早使用的緩存對象,然后再添加新的緩存對象;LruCache 是線程安全的;LruCache 是 Android 的源碼的一部分了;
強引用:直接的對象引用;軟引用:當一個對象只有軟引用存在的時候,系統內存不足時此對象會被 gc 回收;弱引用:當一個對象只有弱引用的時候,此對象會隨時被 gc 回收;關于 DiskLruCache 需要知道的幾點:
DiskLruCache 用于實現存儲設備緩存,即磁盤緩存;DiskLruCache 通過將緩存對象寫入文件系統從而實現緩存的效果;DiskLruCache 不屬于 Android SDK 的一部分;DiskLruCache 提供了 open 方法用于創建自身;DiskLruCache 的緩存添加的操作是通過 Editor 完成的,Editor 表示一個緩存對象的編輯對象;可以通過 edit() 來獲取 Editor 對象;如果這個緩存正在被編輯,那么 edit() 會返回 null,即 DiskLruCache 不允許同時編輯一個緩存對象;一個優秀的 ImageLoader 應該具有的功能:
圖片的同步加載圖片的異步加載圖片壓縮內存緩存磁盤緩存網絡拉取其中內存緩存和磁盤緩存是 ImageLoader 的核心,也是 ImageLoader 的意義所在,這兩級緩存極大提高了程序的效率并且有效地降低了對用戶所造成的流量消耗,只有當這兩級緩存都不可用的時候才會嘗試從網絡中拉取圖片。
End.
Note by HF. Learn from 《Android 開發藝術探索》
新聞熱點
疑難解答