Glide使用缓存的目的是:
1.减少流量的消耗,加快效应速度;
2.Bitmap的创建和销毁比较耗内存,可能会导致频繁的GC操作;使用缓存可以更加高效的加载Bitmap,减少卡顿;
Glide的缓存流程:可以分为内存缓存和磁盘缓存,其中内存缓存可以分为弱引用缓存和LRU缓存;
内存缓存的主要作用时防止应用重新加载图片数据到内存中;而硬盘缓存的主要作用是防止应用重复从网络或其他地方下载和读取数据;
缓存执行的顺序是:
取顺序:弱引用,LRUCache,磁盘
存顺序:磁盘,弱引用,LRUCache

内存缓存的原理:
1.弱引用是由一个HashMap维护,key是缓存的key,这个key是由图片的url, width, height等10个参数组成,value是图片资源对象的弱引用形式:
Map<Key, ResourceWeakReference> activeEngineResources = new HashMap<>();
2.LruCache是有一个LinkedHashMap维护,根据Lru算法来管理图片;大致的原理是利用linkedhashMap链表的特性,把最近使用的文件插到列表的头部,没使用的图片放到尾部;然后当图片大小达到预设定的一个阈值的时候,删除尾部的数据;
Map<T, Y> cache = new LinkedHashMap<>(100, 0.75f, true);
取原理详解:
1.在内存缓存中有一个概念叫做图片引用计数器,具体来说在EngineResource中定义一个acquired变量来记录图片被引用的次数,调用acquire方法会让变量+1,调用release方法会让变量-1;
获取图片资源是先从弱引用获取缓存,拿到的话,引用计数+1,没有的话,从LruCache中拿缓存,拿到的话,引用计数也是+1,同时把图片从LruCache缓存移动到弱引用缓存池中;在在没有的话就通过EngineJob开启线程池去加载图片,拿到的话,引用计数也是+1,会把图片放到弱引用;
存原理详解:
通过EngineJo开启线程池取加载图片,取到数据之后,会回调主线程,把图片存到弱引用;当图片不再使用的时候,比如说暂停请求或者加载完毕之后或者清除资源时,会将其从弱引用中转移到LruCache缓存池;
Glide的缓存机制
Glide缓存机制-详解