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比较后相等,则删除之前的元素。