Android記憶體快取和磁碟快取的實現
阿新 • • 發佈:2019-02-04
記憶體快取
Android自帶的LruCache實現了記憶體快取,LruCache內部主要使用LinkedHashMap的特性來實現,因為LinkedHashMap可支援FIFO和LRU訪問。
LinkedHashMap的特點
LinkedHashMap繼承自HashMap,同時也繼承了HashMap的陣列+連結串列的實現,不過添加了以下功能:
- 把所有的節點維護成一個雙向迴圈連結串列
- accessOrder欄位,預設false,即FIFO的訪問;為true時,實現LRU訪問,具體實現就是在,put時,先刪除存在的節點,然後新增到前面節點的前面(就是往前挪了一個位置)
- 到達負載因子時,會有對應得方法設定LinkedHashMap是自動擴容還是實現快取功能
LruCache的實現
在LinkedHashMap上裝飾了以下功能:
- 不能存空鍵或空值
- 新增執行緒安全
對元素的大小進行了自定義,如下:
//定義每個節點的大小,快取圖片時,返回的是值的位元組數。相應的最大容量也是快取的大小,即可快取的總位元組數。 protected int sizeOf(K key, V value) { return 1; }