三級緩存

一、三級緩存的由來


現(xiàn)在App都是需要網絡的,那通過網絡獲取圖片在正常不過得事了,假如每次啟動App的時候都從網絡拉取圖片的話,勢必會消耗很多流量,一個很耗流量的應用,其用戶數(shù)量級肯定要受到影響

特別是,當我們想要重復瀏覽一些圖片時,如果每一次瀏覽都需要通過網絡獲取,流量的浪費可想而知.所以我們要圖片進行緩存,從而避免流量的浪費。

二、什么是三級緩存

三級緩存是內存緩存,本地緩存,網絡緩存。第一次安裝打開App的時候肯定是先通過網絡來獲取圖片,獲取之后我們把圖片保存在本地,和內存中。之后再運行App的時候,就優(yōu)先訪問內存中的圖片,如果內存中沒有,就訪問本地,只有在初次訪問新的內容時,才通過網絡來獲取。所以內存緩存優(yōu)先加載,速度最快,其次本地,最后才是網絡,這樣可以必變流量的浪費。

三、三級緩存的原理

3.1、內存緩存

內存緩存LruCache是Android 3.1所提供的一個緩存類,所以我們可以直接使用LruCache實現(xiàn)內存緩存。LruCache維護了一個緩存對象列表?LinkedHashMap,LruCache還可以設置緩存的大小,一般為當前進程可用容量的1/8。重寫sizeOf方法,可以計算出要緩存的每張圖片的大小。當調用put()方法時,就會在集合中添加元素,并調用trimToSize()判斷緩存是否已滿,如果滿了就用LinkedHashMap的迭代器刪除隊尾元素,即近期最少訪問的元素。當調用get()方法訪問緩存對象時,就會調用LinkedHashMap的get()方法獲得對應集合元素,同時會更新該元素到隊頭。

3.2、磁盤緩存

3.2.1、DiskLruCache并不是由Google官方編寫的,所以這個類并沒有被包含在Android API當中,我們需要將這個類從網上下載下來,然后手動添加到項目當中。

DiskLruCache是不能new出實例的,如果我們要創(chuàng)建一個DiskLruCache的實例,則需要調用它的open()方法,open()方法接收四個參數(shù),第一個參數(shù)指定的是數(shù)據(jù)的緩存地址,第二個參數(shù)指定當前應用程序的版本號,第三個參數(shù)指定同一個key可以對應多少個緩存文件,基本都是傳1,第四個參數(shù)指定最多可以緩存多少字節(jié)的數(shù)據(jù)。

3.2.2、寫入緩存

借助DiskLruCache.Editor這個類完成的。這個類也是不能new的,需要調用DiskLruCache的edit()方法來獲取實例,edit()方法接收一個參數(shù)key,這個key將會成為緩存文件的文件名,并且必須要和圖片的URL是一一對應的。因為圖片URL中可能包含一些特殊字符,這些字符有可能在命名文件時是不合法的。所以我們要將圖片的URL進行MD5編碼,編碼后的字符串肯定是唯一的,并且只會包含0-F這樣的字符,完全符合文件的命名規(guī)則。

3.2.3、讀取緩存

讀取的方法要比寫入簡單一些,主要是借助DiskLruCache的get()方法實現(xiàn)的,get()方法要求傳入一個key來獲取到相應的緩存數(shù)據(jù),而這個key毫無疑問就是將圖片URL進行MD5編碼后的值了。

3.3、網絡緩存

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容