Gilde缓存机制
Glide三级缓存分别为:活动缓存、内存缓存、磁盘缓存
- 取的顺序是:活动缓存、LruCache、磁盘缓存
- 存的顺序是:磁盘缓存、活动缓存、LruCache
1、活动缓存(HashMap)
活动缓存是由这样一个HashMap维护,key是缓存的key,这个key由图片url、width、height等10来个参数组成;value是图片资源对象的弱引用形式。
Map<Key, ResourceWeakReference> activeEngineResources = new HashMap<>();
2、内存缓存(LruCache)
LruCache是由一个LinkedHashMap维护,根据Lru算法来管理图片。大致的原理是利用LinkHashMap链表的特性,把最近使用过的文件插入到列表头部,没使用的图片放在尾部;然后当图片大小到达预先设置的一个阀值的时候 ,按算法删除列表尾部的部分数据。
#LruCache
Map<T, Y> cache = new LinkedHashMap<>(100, 0.75f, true);
3、磁盘缓存原理(DiskLruCache)
- DiskCacheStrategy.DATA: 只缓存原始图片;
- DiskCacheStrategy.RESOURCE:只缓存转换过后的图片;
- DiskCacheStrategy.ALL:既缓存原始图片,也缓存转换过后的图片;对于远程图片,缓存 DATA和 RESOURCE;对于本地图片,只缓存 RESOURCE;
- DiskCacheStrategy.NONE:不缓存任何内容;
- DiskCacheStrategy.AUTOMATIC:默认策略,尝试对本地和远程图片使用最佳的策略。当下载网络图片时,使用DATA(原因很简单,对本地图片的处理可比网络要容易得多);对于本地图片,使用RESOURCE。