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í)回收緩存對(duì)象。提供抽象函數(shù):createReference,表示根據(jù) Bitmap 創(chuàng)建一個(gè) Reference 做為緩存對(duì)象。Reference 可以是 WeakReference、SoftReference 等
WeakMemoryCache.java
以WeakReference<Bitmap>做為緩存 value 的內(nèi)存緩存,實(shí)現(xiàn)了BaseMemoryCache。
實(shí)現(xiàn)了BaseMemoryCache的createReference(Bitmap value)函數(shù),直接返回一個(gè)new WeakReference<Bitmap>(value)做為緩存 value。
LimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,繼承自BaseMemoryCache的抽象類。
會(huì)在 put(…) 函數(shù)中判斷總體大小是否超出了上限,是則循環(huán)刪除緩存對(duì)象直到小于上限,刪除順序由抽象函數(shù)removeNext決定
LargestLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會(huì)在緩存滿時(shí)優(yōu)先刪除 size 最大的元素,繼承自LimitedMemoryCache。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回當(dāng)前緩存中 size 最大的元素
UsingFreqLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會(huì)在緩存滿時(shí)優(yōu)先刪除使用次數(shù)最少的元素,繼承自LimitedMemoryCache。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回當(dāng)前緩存中使用次數(shù)最少的元素
LRULimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會(huì)在緩存滿時(shí)優(yōu)先刪除最近最少使用的元素,繼承自LimitedMemoryCache。
通過(guò)new LinkedHashMap<String, Bitmap>(10, 1.1f, true)作為緩存池。LinkedHashMap 第三個(gè)參數(shù)表示是否需要根據(jù)訪問(wèn)順序(accessOrder)排序,true 表示根據(jù)accessOrder排序,最近訪問(wèn)的跟最新加入的一樣放到最后面,false 表示根據(jù)插入順序排序。這里為 true 且緩存滿時(shí)始終刪除第一個(gè)元素,即始終刪除最近最少訪問(wèn)的元素。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回第一個(gè)元素,即最近最少使用的元素
FIFOLimitedMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會(huì)在緩存滿時(shí)優(yōu)先刪除先進(jìn)入緩存的元素,繼承自LimitedMemoryCache。
實(shí)現(xiàn)了LimitedMemoryCache緩存removeNext()函數(shù),總是返回最先進(jìn)入緩存的元素
LruMemoryCache.java
限制總字節(jié)大小的內(nèi)存緩存,會(huì)在緩存滿時(shí)優(yōu)先刪除最近最少使用的元素,實(shí)現(xiàn)了MemoryCache。這個(gè)也是使用的lru算法,和LRULimitedMemoryCache不同的是,LRULimitedMemoryCache緩存的是bitmap的弱引用)。
以new LinkedHashMap<String, Bitmap>(0, 0.75f, true)作為緩存池。LinkedHashMap 第三個(gè)參數(shù)表示是否需要根據(jù)訪問(wèn)順序(accessOrder)排序,true 表示根據(jù)accessOrder排序,最近訪問(wèn)的跟最新加入的一樣放到最后面,false 表示根據(jù)插入順序排序。這里為 true 且緩存滿時(shí)始終刪除第一個(gè)元素,即始終刪除最近最少訪問(wèn)的元素。
在put(…)函數(shù)中通過(guò)trimToSize(int maxSize)函數(shù)判斷總體大小是否超出了上限,是則刪除第緩存池中第一個(gè)元素,即最近最少使用的元素,直到總體大小小于上限。
LruMemoryCache功能上與LRULimitedMemoryCache類似,不過(guò)在實(shí)現(xiàn)上更加優(yōu)雅。用簡(jiǎn)單的實(shí)現(xiàn)接口方式,而不是不斷繼承的方式。
LimitedAgeMemoryCache.java
限制了對(duì)象最長(zhǎng)存活周期的內(nèi)存緩存。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個(gè)特性。以一個(gè)MemoryCache內(nèi)存緩存和一個(gè) maxAge 做為構(gòu)造函數(shù)入?yún)?。?get(…) 時(shí)判斷如果對(duì)象存活時(shí)間已經(jīng)超過(guò)設(shè)置的最長(zhǎng)時(shí)間,則刪除。
FuzzyKeyMemoryCache.java
可以將某些原本不同的 key 看做相等,在 put 時(shí)刪除這些相等的 key。
MemoryCache的裝飾者,相當(dāng)于為MemoryCache添加了一個(gè)特性。以一個(gè)MemoryCache內(nèi)存緩存和一個(gè) keyComparator 做為構(gòu)造函數(shù)入?yún)?。?put(…) 時(shí)判斷如果 key 與緩存中已有 key 經(jīng)過(guò)Comparator比較后相等,則刪除之前的元素。