什么是三級緩存?
安順網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。為什么要進(jìn)行三級緩存
三級緩存策略,最實(shí)在的意義就是 減少不必要的流量消耗,增加加載速度 。
如今的 APP 網(wǎng)絡(luò)交互似乎已經(jīng)必不可少,通過網(wǎng)絡(luò)獲取圖片再正常不過了。但是,每次啟動應(yīng)用都要從網(wǎng)絡(luò)獲取圖片,或者是想重復(fù)瀏覽一些圖片的時(shí)候,每次瀏覽都需要網(wǎng)絡(luò)獲取,消耗的流量就多了,在如今的流量資費(fèi)來說,肯定會容易影響用戶數(shù)量。
還有就是網(wǎng)絡(luò)加載圖片,有時(shí)候會加載很慢,影響了用戶體驗(yàn)。
另外從開發(fā)角度來說,Bitmap 的創(chuàng)建非常消耗時(shí)間和內(nèi)存,可能導(dǎo)致頻繁GC。而使用緩存策略,會更加高效地加載 Bitmap,減少卡頓,從而減少讀取時(shí)間。
而內(nèi)存緩存的主要作用是防止應(yīng)用重復(fù)將圖片數(shù)據(jù)讀取到內(nèi)存當(dāng)中,硬盤緩存則是防止應(yīng)用重復(fù)從網(wǎng)絡(luò)或其他地方重復(fù)下載和讀取數(shù)據(jù)。
三級緩存的原理
具體的緩存策略可以是這樣的:內(nèi)存作為一級緩存,本地作為二級緩存,網(wǎng)絡(luò)加載為最后。其中,內(nèi)存使用 LruCache ,其內(nèi)部通過 LinkedhashMap 來持有外界緩存對象的強(qiáng)引用;對于本地緩存,使用 DiskLruCache。加載圖片的時(shí)候,首先使用 LRU 方式進(jìn)行尋找,找不到指定內(nèi)容,按照三級緩存的方式,進(jìn)行本地搜索,還沒有就網(wǎng)絡(luò)加載。
圖片緩存代碼實(shí)現(xiàn)
自己實(shí)現(xiàn)一個(gè)三級緩存的工具類并不困難。大概可以這樣:
public class BitmapUtil{ //單例模式 //··· public void displayImage(ImageView img, String url){ Bitmap bitmap; //內(nèi)存緩存,url做唯一標(biāo)識符 bitmap = loadBitmapFromMemoryCache(url); if(bitmap != null){ img.setImageBitmap(bitmap); return ; } //本地緩存 bitmap = loadBitmapFromDiskCache(url); if(bitmap != null){ img.setImageBitmap(bitmap); //然后將本地緩存保存到內(nèi)存緩存中 return ; } //網(wǎng)絡(luò)緩存 bitmap = loadBitmapFromNet(url); if(bitmap != null){ img.setImageBitmap(bitmap); //同理將緩存保存到內(nèi)存和本地中 return; } } }