Cache pkg
cache包目录
disk cache
1.DiskCache.java
该接口是本地内存操作的提取,因为涉及到缓存设计的不同算法(在iml中有具体使用)
naming
1.FileNameGenerator.java
该类是一个interface(主要是用来解耦) 本地缓存时方便给image file命名
2.HashCodeFileNameGenerator.java
实现了FileNameGenerator,通过本地缓存file name以image uri hashcode命名
3.Md5FileNameGenerator
同样实现了FileNameGenerator,通过image uri的MD5给文件命名;
这里用到了BigInteger.toString(RADIX)
这里的RADIX是36进制的,这种命名既可以保证唯一,文件名又短。
可以看出以上这三个类的设计是一个策略模式
impl
1.BaseDiskCache.java
实现了DiskCache,是一个模版类(模版方法模式);
注意:reserveCacheDir是本地缓存的一个预留目录,当cacheDir不可用时使用reserveCacheDir;
2.UnlimitedDiskCache.java
本地缓存的默认实现,就像类名说的那样,没有限制本地缓存空间大小。
3.LimitedAgeDiskCache.java
具有有效期的本地缓存;
key:loadingDates存储了文件的缓存日期。
ext
1.Util.java
垃圾抽屉工具类
2.DiskLruCache.java
封装了LRU本地缓存的核心实现。
本地文件的key,size,等信息作者是采用文件记录的方式实现的;
记录中图片文件的state-specific values
DIRTY 创建一个图片文件
CLEAN 图片文件缓存成功,带读取
READ 读取图片文件
REMOVE 删除图片文件
每次对图片文件进行操作,state改变都会做记录
3.LruDiskCache.java
LRU实现的本地缓存,实现了DiskCache;
memory cache
1.MemoryCache.java
声明内存缓存调用接口
2.BaseMemoryCache.java
是一个模版类,实现MemoryCache了接口
这里bitmap被封装在Reference(内存不足时回收),避免OOM。
3.LimitedMemoryCache.java
extends BaseMemoryCache模版类,可以制定内存缓存的大小;
每次put的时候和cacheSize(AtomicInteger类型,保证计算操作线程安全)进行比较,超出sizeLimit,从hardCache中移除;
4.FIFOLimitedMemoryCache.java
FIFO算法实现内存缓存
当put的时候超出sizeLimit,采用先进先出策略移除。
5.FuzzyKeyMemoryCache.java
implements MemoryCache,装饰模式。
该类的实现给图片缓存算法增加了一个特别的功能,当图片key在缓存中已经存在,可以替换;
6.LargestLimitedMemoryCache.java
模版方法模式,extends LimitedMemoryCache。当超出sizeLimit,移除缓存中尺寸最大的图片。
7.LimitedAgeMemoryCache.java
装饰模式;实现了特色功能,给缓存中的图片指定了有效期。当图片存在缓存中的时间大于maxAge,直接移除。
8.LRULimitedMemoryCache.java
模版模式,LRU算法实现的图片缓存。当超出maxSize,移除最长时间没有使用的图片对象。
注意:这里作者LRU使用LinkHashMap实现,accessOrder = true;
考虑到侧重点是在空间上的使用,加载因子LOAD_FACTOR = 1.1f,而不是0.75f。
9.LruMemoryCache.java
策略模式,单纯的LRU缓存,不依赖Reference
10.UsingFreqLimitedMemoryCache.java
模版模式,简单来说LFU缓存,超出sizeLimit,移除最近使用次数最少的图片对象。
11.WeakMemoryCache.java
策略模式,extends BaseMemoryCache。
弱引用实现的图片缓存,图片对象依赖gc回收。