【Android 應用開發】LruCache 簡介
文章目錄
LruCache 應用場景
LruCache 算法原理
LruCache 實現
LruCache 參考
1. 緩存需求 :
處理大量數據時 , 為了提升性能 , 需要對其中的部分數據進行緩存 ;
涉及到使用緩存 , 和刪除內存緩存操作 ,
使緩存的數據大小保持在一個穩定的水平 ;
2. 數據寫入緩存 :
當需要使用某個數據時 , 將該數據寫入緩存 ,
此時先對內存使用情況進行一次判定 ;
如果內存不足 , 需要移除緩存數據中的部分內容 , 然后再將數據寫入緩存 ;
當然 , 如果緩存內存足夠 , 直接寫入緩存即可 ;
3. LruCache 引入 :
那么如何確定刪除緩存中的哪些數據呢 , 這里就需要用到 LruCache 了 ;
LRU ( Least Recently Used 最近最少使用 ) 算法 :
內部維護了一個固定大小的隊列 ( 先進先出 ) ;
放入元素時根據不同的情況執行不同的策略 ;
1. 緩存中是否有該元素 :
如果緩存中有該元素 , 那么將該元素放到隊列的隊頭 ;
2. 緩存中沒有該元素 :
如果緩存中沒有改元素 , 那么需要插入該元素 ;
3. 緩存空間是否已滿 :
如果緩存空間滿了 , 需要將隊尾元素刪除 , 將元素放在隊首 ;
4. 緩存空間沒有滿 :
如果緩存空間沒有滿 , 直接將元素放在隊首 ;
緩存隊列中 ,
隊尾的元素就是最近最少使用的元素 ,
因為其一旦使用就會提升到隊首 ,
因此當緩存滿了以后 , 就刪除隊尾的元素 ;
1. Android 中的 LruCache :
其緩存空間就是一個 LinkHashMap 鏈表 ,
當調用 put 方法向其中放入新元素時 ,
就會判斷這個 LinkHashMap 鏈表是已滿 ,
如果沒有空間 , 就將最后一個最近最少使用的元素刪除 ;
2. LinkHashMap 實現 :
LinkHashMap 鏈表內部由數組和雙向鏈表實現 ,
其能夠保證與隊列一致的性質 , 即先進先出 , 并保證其插入取出順序的一致性 ;
當調用 get 方法獲取其中的元素時 , 會將該元素提取到隊頭中 , 這符合了 LRU 算法的要求 ;
LruCache 參考 :
① Android LruCache 文檔
② 談談LruCache算法的底層實現原理及其內部源碼
③ 完全解析Andorid的緩存機制LruCache
Android
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。