Cache pkg
cache包目錄
disk cache
1.DiskCache.java
該接口是本地內(nèi)存操作的提取,因?yàn)樯婕暗骄彺嬖O(shè)計(jì)的不同算法(在iml中有具體使用)
naming
1.FileNameGenerator.java
該類(lèi)是一個(gè)interface(主要是用來(lái)解耦) 本地緩存時(shí)方便給image file命名
2.HashCodeFileNameGenerator.java
實(shí)現(xiàn)了FileNameGenerator,通過(guò)本地緩存file name以image uri hashcode命名
3.Md5FileNameGenerator
同樣實(shí)現(xiàn)了FileNameGenerator,通過(guò)image uri的MD5給文件命名;

這里用到了BigInteger.toString(RADIX)
這里的RADIX是36進(jìn)制的,這種命名既可以保證唯一,文件名又短。
可以看出以上這三個(gè)類(lèi)的設(shè)計(jì)是一個(gè)策略模式
impl
1.BaseDiskCache.java
實(shí)現(xiàn)了DiskCache,是一個(gè)模版類(lèi)(模版方法模式);
注意:reserveCacheDir是本地緩存的一個(gè)預(yù)留目錄,當(dāng)cacheDir不可用時(shí)使用reserveCacheDir;
2.UnlimitedDiskCache.java
本地緩存的默認(rèn)實(shí)現(xiàn),就像類(lèi)名說(shuō)的那樣,沒(méi)有限制本地緩存空間大小。
3.LimitedAgeDiskCache.java
具有有效期的本地緩存;

key:loadingDates存儲(chǔ)了文件的緩存日期。
ext
1.Util.java
垃圾抽屜工具類(lèi)
2.DiskLruCache.java
封裝了LRU本地緩存的核心實(shí)現(xiàn)。
本地文件的key,size,等信息作者是采用文件記錄的方式實(shí)現(xiàn)的;
記錄中圖片文件的state-specific values
DIRTY 創(chuàng)建一個(gè)圖片文件
CLEAN 圖片文件緩存成功,帶讀取
READ 讀取圖片文件
REMOVE 刪除圖片文件
每次對(duì)圖片文件進(jìn)行操作,state改變都會(huì)做記錄
3.LruDiskCache.java
LRU實(shí)現(xiàn)的本地緩存,實(shí)現(xiàn)了DiskCache;
memory cache
1.MemoryCache.java
聲明內(nèi)存緩存調(diào)用接口
2.BaseMemoryCache.java
是一個(gè)模版類(lèi),實(shí)現(xiàn)MemoryCache了接口

這里bitmap被封裝在Reference(內(nèi)存不足時(shí)回收),避免OOM。
3.LimitedMemoryCache.java
extends BaseMemoryCache模版類(lèi),可以制定內(nèi)存緩存的大??;

每次put的時(shí)候和cacheSize(AtomicInteger類(lèi)型,保證計(jì)算操作線程安全)進(jìn)行比較,超出sizeLimit,從hardCache中移除;
4.FIFOLimitedMemoryCache.java
FIFO算法實(shí)現(xiàn)內(nèi)存緩存

當(dāng)put的時(shí)候超出sizeLimit,采用先進(jìn)先出策略移除。
5.FuzzyKeyMemoryCache.java
implements MemoryCache,裝飾模式。
該類(lèi)的實(shí)現(xiàn)給圖片緩存算法增加了一個(gè)特別的功能,當(dāng)圖片key在緩存中已經(jīng)存在,可以替換;

6.LargestLimitedMemoryCache.java
模版方法模式,extends LimitedMemoryCache。當(dāng)超出sizeLimit,移除緩存中尺寸最大的圖片。

7.LimitedAgeMemoryCache.java
裝飾模式;實(shí)現(xiàn)了特色功能,給緩存中的圖片指定了有效期。當(dāng)圖片存在緩存中的時(shí)間大于maxAge,直接移除。

8.LRULimitedMemoryCache.java
模版模式,LRU算法實(shí)現(xiàn)的圖片緩存。當(dāng)超出maxSize,移除最長(zhǎng)時(shí)間沒(méi)有使用的圖片對(duì)象。

注意:這里作者LRU使用LinkHashMap實(shí)現(xiàn),accessOrder = true;
考慮到側(cè)重點(diǎn)是在空間上的使用,加載因子LOAD_FACTOR = 1.1f,而不是0.75f。

9.LruMemoryCache.java
策略模式,單純的LRU緩存,不依賴Reference<Bitmap>。
10.UsingFreqLimitedMemoryCache.java
模版模式,簡(jiǎn)單來(lái)說(shuō)LFU緩存,超出sizeLimit,移除最近使用次數(shù)最少的圖片對(duì)象。

11.WeakMemoryCache.java
策略模式,extends BaseMemoryCache。
弱引用實(shí)現(xiàn)的圖片緩存,圖片對(duì)象依賴gc回收。
