Android-UIL-cache

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給文件命名;

1-1

這里用到了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

具有有效期的本地緩存;

1-2

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了接口

1-3

這里bitmap被封裝在Reference(內(nèi)存不足時(shí)回收),避免OOM。

3.LimitedMemoryCache.java

extends BaseMemoryCache模版類(lèi),可以制定內(nèi)存緩存的大??;

1-4

每次put的時(shí)候和cacheSize(AtomicInteger類(lèi)型,保證計(jì)算操作線程安全)進(jìn)行比較,超出sizeLimit,從hardCache中移除;

4.FIFOLimitedMemoryCache.java

FIFO算法實(shí)現(xiàn)內(nèi)存緩存

1-5

當(dāng)put的時(shí)候超出sizeLimit,采用先進(jìn)先出策略移除。

5.FuzzyKeyMemoryCache.java

implements MemoryCache,裝飾模式。

該類(lèi)的實(shí)現(xiàn)給圖片緩存算法增加了一個(gè)特別的功能,當(dāng)圖片key在緩存中已經(jīng)存在,可以替換;

1-6

6.LargestLimitedMemoryCache.java

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

1-7

7.LimitedAgeMemoryCache.java

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

1-8

8.LRULimitedMemoryCache.java

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


1-9

注意:這里作者LRU使用LinkHashMap實(shí)現(xiàn),accessOrder = true;

考慮到側(cè)重點(diǎn)是在空間上的使用,加載因子LOAD_FACTOR = 1.1f,而不是0.75f。

2-1

9.LruMemoryCache.java

策略模式,單純的LRU緩存,不依賴Reference<Bitmap>。

10.UsingFreqLimitedMemoryCache.java

模版模式,簡(jiǎn)單來(lái)說(shuō)LFU緩存,超出sizeLimit,移除最近使用次數(shù)最少的圖片對(duì)象。


2-2

11.WeakMemoryCache.java

策略模式,extends BaseMemoryCache。

弱引用實(shí)現(xiàn)的圖片緩存,圖片對(duì)象依賴gc回收。

2-3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,104評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評(píng)論 25 709
  • 寫(xiě)在前面,UIL這個(gè)圖片加載框架在去年的時(shí)候,作者就已經(jīng)宣布因?yàn)闀r(shí)間關(guān)系,停止維護(hù)了!以下為作者原話: Proje...
    寶塔山上的貓閱讀 507評(píng)論 0 3
  • 獨(dú)生子女政策,讓我們生來(lái)就沒(méi)有兄弟姐妹爭(zhēng)搶玩具和寵愛(ài)。素質(zhì)教育,讓我們小學(xué)就開(kāi)始享受撕書(shū)的快感。千年蟲(chóng),讓我們的中...
    預(yù)言哥閱讀 235評(píng)論 0 2
  • 《中國(guó)式眾籌》里的防微杜漸:避開(kāi)12個(gè)雷區(qū),是我反復(fù)閱讀的,恨不得讀透吃透!不要小看這12個(gè)雷區(qū),稍微不小心踩上了...
    周金城閱讀 211評(píng)論 0 0

友情鏈接更多精彩內(nèi)容