Android-UIL-cache

作者: guangming | 来源:发表于2016-10-27 17:03 被阅读78次

    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给文件命名;

    1-1

    这里用到了BigInteger.toString(RADIX)

    这里的RADIX是36进制的,这种命名既可以保证唯一,文件名又短。

    可以看出以上这三个类的设计是一个策略模式

    impl

    1.BaseDiskCache.java

    实现了DiskCache,是一个模版类(模版方法模式)

    注意:reserveCacheDir是本地缓存的一个预留目录,当cacheDir不可用时使用reserveCacheDir;

    2.UnlimitedDiskCache.java

    本地缓存的默认实现,就像类名说的那样,没有限制本地缓存空间大小。

    3.LimitedAgeDiskCache.java

    具有有效期的本地缓存;

    1-2

    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了接口

    1-3

    这里bitmap被封装在Reference(内存不足时回收),避免OOM。

    3.LimitedMemoryCache.java

    extends BaseMemoryCache模版类,可以制定内存缓存的大小;

    1-4

    每次put的时候和cacheSize(AtomicInteger类型,保证计算操作线程安全)进行比较,超出sizeLimit,从hardCache中移除;

    4.FIFOLimitedMemoryCache.java

    FIFO算法实现内存缓存

    1-5

    当put的时候超出sizeLimit,采用先进先出策略移除。

    5.FuzzyKeyMemoryCache.java

    implements MemoryCache,装饰模式。

    该类的实现给图片缓存算法增加了一个特别的功能,当图片key在缓存中已经存在,可以替换;

    1-6

    6.LargestLimitedMemoryCache.java

    模版方法模式,extends LimitedMemoryCache。当超出sizeLimit,移除缓存中尺寸最大的图片。

    1-7

    7.LimitedAgeMemoryCache.java

    装饰模式;实现了特色功能,给缓存中的图片指定了有效期。当图片存在缓存中的时间大于maxAge,直接移除。

    1-8

    8.LRULimitedMemoryCache.java

    模版模式,LRU算法实现的图片缓存。当超出maxSize,移除最长时间没有使用的图片对象。

    1-9

    注意:这里作者LRU使用LinkHashMap实现,accessOrder = true;

    考虑到侧重点是在空间上的使用,加载因子LOAD_FACTOR = 1.1f,而不是0.75f。

    2-1

    9.LruMemoryCache.java

    策略模式,单纯的LRU缓存,不依赖Reference<Bitmap>。

    10.UsingFreqLimitedMemoryCache.java

    模版模式,简单来说LFU缓存,超出sizeLimit,移除最近使用次数最少的图片对象。

    2-2

    11.WeakMemoryCache.java

    策略模式,extends BaseMemoryCache。

    弱引用实现的图片缓存,图片对象依赖gc回收。

    2-3

    相关文章

      网友评论

        本文标题:Android-UIL-cache

        本文链接:https://www.haomeiwen.com/subject/juuxuttx.html