天天看點

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

Lrucache(繼承了LinkedHashMap):

LRUCache的使用:

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

原理:

是以接下來講一下LinkedHashMap源碼(采用雙向連結清單的雙向隊列)是怎麼實作一個删除最近最少使用資料的功能?

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

get和put方法中都調用了recordAccess方法,通過這個方法記錄下使用者通路的Entry,并把它移到隊列的尾部去

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...
android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

分析完父類LinkedHashMap,接着分析LRUCache的源碼:

首先看LRUCache的構造方法:

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

接下來看幾個源碼中重要的函數:

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

trimToSize();

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

DisLrucache:

原理:并沒有采用什麼LinkedHashMap的結構,就是在journal檔案中單純的存入,讀取等等操作

首先打開緩存,即擷取DisLrucache的對象(調用靜态方法open):

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

打開之後就可以緩存中寫入,讀取,删除 :

1.寫入

先擷取一個對象用來進行DisLrucache的寫入操作

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

key就是URl經過0xFF&url移位之後結果(和HashMap一樣)

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...
android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

讀取操作:

和寫入一樣,首

先擷取一個對象用來進行DisLrucache的讀取操作;

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...
android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...

删除緩存:

一樣的,先擷取一個對象用來進行DisLrucache的删除操作

android volley 緩存機制,Android LRUCache(記憶體緩存)和DisLrucache(硬碟緩存) (Volley架構是網絡層擷取資料的架構)...