MemoryCache.java
Bitmap 內(nèi)存緩存接口爱葵,需要實(shí)現(xiàn)的接口包括 get(…)反浓、put(…)、remove(…)浓瞪、clear()巧婶、keys()
BaseMemoryCache.java
實(shí)現(xiàn)了MemoryCache主要函數(shù)的抽象類,以 Map> softMap 做為緩存池英岭,利于虛擬機(jī)在內(nèi)存不足時回收緩存對象诅妹。提供抽象函數(shù):createReference毅人,表示根據(jù) Bitmap 創(chuàng)建一個 Reference 做為緩存對象。Reference 可以是 WeakReference划煮、SoftReference 等
WeakMemoryCache.java
以WeakReference<Bitmap>做為緩存 value 的內(nèi)存緩存缔俄,實(shí)現(xiàn)了BaseMemoryCache。
實(shí)現(xiàn)了BaseMemoryCache的createReference(Bitmap value)函數(shù)蟹略,直接返回一個new WeakReference<Bitmap>(value)做為緩存 value挖炬。
LimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存贼急,繼承自BaseMemoryCache的抽象類捏萍。
會在 put(…) 函數(shù)中判斷總體大小是否超出了上限令杈,是則循環(huán)刪除緩存對象直到小于上限碴倾,刪除順序由抽象函數(shù)removeNext決定
LargestLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除 size 最大的元素异雁,繼承自LimitedMemoryCache纲刀。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)担平,總是返回當(dāng)前緩存中 size 最大的元素
UsingFreqLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除使用次數(shù)最少的元素面褐,繼承自LimitedMemoryCache取胎。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)闻蛀,總是返回當(dāng)前緩存中使用次數(shù)最少的元素
LRULimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除最近最少使用的元素析恢,繼承自LimitedMemoryCache秧饮。
通過new LinkedHashMap<String, Bitmap>(10, 1.1f, true)作為緩存池盗尸。LinkedHashMap 第三個參數(shù)表示是否需要根據(jù)訪問順序(accessOrder)排序帽撑,true 表示根據(jù)accessOrder排序,最近訪問的跟最新加入的一樣放到最后面扣蜻,false 表示根據(jù)插入順序排序。這里為 true 且緩存滿時始終刪除第一個元素莽使,即始終刪除最近最少訪問的元素芳肌。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回第一個元素翎迁,即最近最少使用的元素
FIFOLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存净薛,會在緩存滿時優(yōu)先刪除先進(jìn)入緩存的元素,繼承自LimitedMemoryCache痴腌。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù)爆班,總是返回最先進(jìn)入緩存的元素
LruMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會在緩存滿時優(yōu)先刪除最近最少使用的元素戚嗅,實(shí)現(xiàn)了MemoryCache懦胞。這個也是使用的lru算法凉泄,和LRULimitedMemoryCache不同的是,LRULimitedMemoryCache緩存的是bitmap的弱引用)胀糜。
以new LinkedHashMap<String, Bitmap>(0, 0.75f, true)作為緩存池蒂誉。LinkedHashMap 第三個參數(shù)表示是否需要根據(jù)訪問順序(accessOrder)排序,true 表示根據(jù)accessOrder排序括堤,最近訪問的跟最新加入的一樣放到最后面,false 表示根據(jù)插入順序排序讥电。這里為 true 且緩存滿時始終刪除第一個元素轧抗,即始終刪除最近最少訪問的元素。
在put(…)函數(shù)中通過trimToSize(int maxSize)函數(shù)判斷總體大小是否超出了上限潮剪,是則刪除第緩存池中第一個元素分唾,即最近最少使用的元素,直到總體大小小于上限弧蝇。
LruMemoryCache功能上與LRULimitedMemoryCache類似折砸,不過在實(shí)現(xiàn)上更加優(yōu)雅。用簡單的實(shí)現(xiàn)接口方式两芳,而不是不斷繼承的方式去枷。
LimitedAgeMemoryCache.java
限制了對象最長存活周期的內(nèi)存緩存删顶。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個特性特咆。以一個MemoryCache內(nèi)存緩存和一個 maxAge 做為構(gòu)造函數(shù)入?yún)⒙剂弧T?get(…) 時判斷如果對象存活時間已經(jīng)超過設(shè)置的最長時間,則刪除荒叶。
FuzzyKeyMemoryCache.java
可以將某些原本不同的 key 看做相等输虱,在 put 時刪除這些相等的 key宪睹。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個特性亭病。以一個MemoryCache內(nèi)存緩存和一個 keyComparator 做為構(gòu)造函數(shù)入?yún)⒆锾T?put(…) 時判斷如果 key 與緩存中已有 key 經(jīng)過Comparator比較后相等,則刪除之前的元素菠齿。