三级缓存
- ActiveResources
- HashMap结构,使用弱引用缓存resource,开启子线程监听resource释放情况,如果被回收放入内存缓存
- ReferenceQueue监听回收情况,调用remove方法,如果被回收返回值不为空。
- EngineResource 资源回收策略, Source的封装类,使用引用计数法标记Source使用次数acquired,引用acquired +1,回收-acquired 1(-1包括请求暂停,页面生命周期destroy等),当值为0,调用回调方法onResourceReleased加入内存缓存
- Glide的key是一个用url和宽高封装的一个对象,重写了hash 和 equals
- (内存缓存)LruResourceCache 基于LruCache
- 利用LinkedHashMap,构造方法多一个参数accessOrder,在get,put,把元素放在链表尾端,到max后移除顶端的数据(最近最少使用的item)
- DiskLruCache
- DiskLruCache 也是使用了LRU,但是他是一个日志模式,记录文件操作记录,创建的时候打开最近使用比较频繁的文件并缓存到LinkedHashMap (存的是file对象,不是bitmap)