27 Android 緩存處理
APP通常需要從服務(wù)器獲取數(shù)據(jù),服務(wù)器端的數(shù)據(jù)并不都是實(shí)時變化的,如商品的圖片等;可以把服務(wù)器端數(shù)據(jù)復(fù)制到設(shè)備的內(nèi)存或本地,APP從內(nèi)存或本地獲取數(shù)據(jù),不用每次都從服務(wù)器獲取,從而節(jié)約用戶的上網(wǎng)流量和加快APP響應(yīng)速度,這就是緩存設(shè)計(jì)。
內(nèi)存和本地文件緩存空間并非是無限大的,容量越大讀取效率越低,需要設(shè)置一個折中緩存容量比如10M,如果緩存已滿,需要采用合適的替換策略換掉一個已有的數(shù)據(jù)對象,并替之已一個新的數(shù)據(jù)對象。
依照這樣的做法,取得一個圖片(總圖片數(shù)為N)的流程應(yīng)該是這樣的:
A先在內(nèi)存緩存取(設(shè)存儲K個),若取到則返回(命中率為K/N,時間為tA),否則進(jìn)行B。
B在本地文件緩存(設(shè)能存儲M個)中取,若取到則返回并更新內(nèi)存緩存(命中率為(M-K)/N,時間為tB),否則進(jìn)行C。
C通過網(wǎng)絡(luò)下載圖片,并更新本地文件緩存和內(nèi)存緩存(命中率為(N-M)/N,時間為tC)。
取一張圖片的時間期望為:W = tA * (K/N) +tB * (M-K)/N + tC * (N-M)/N ,其中tA< tB < tC ,為使W代價(jià)小,即盡可能快的取得數(shù)據(jù),應(yīng)該提高內(nèi)存緩存的命中率和本地文件緩存的命中率,但兩者的容量都是有限制的,所以必須使用適合替換算法來更新兩者所存儲的對象。選擇合適的替換算法是緩存的難點(diǎn)所在。