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