Glide 缓存和picasso 的缓存有哪些不同
Glide 的缓存策略和Picasso 的缓存策略上有哪些不同,Picasso 是被动清除缓存,也就是依赖于LRU 的 容量来清理 。Glide 可以在LRU的基础上添加了主动清理的功能。
- 监听Activity 和 Fragment的 生命周期进行清理,也就是资源和他们绑定
- toDo 和生命周期绑定的清理工作,是如何清理的?
Glide 缓存一共有几层
一共分为三层
- ActiveResources,使用 WeakReference 和HashMap 来缓存正在使用的图片资源,并且使用的单线程的线程池,启动监听任务,监听ReferenceQueue , 这个阻塞队列当 poll 成功后,就意味着和HashMap 中有资源被回收掉了,清理它,提高HashMap的查询效率
- 内存缓存Cache LRU
private EngineResource<?> getEngineResourceFromCache(Key key) {
Resource<?> cached = cache.remove(key);
}
当从 cache 中取出 缓存后会自动移除,并自动添加到 ActiveResources 中,
同样,当我们ActiveResources 执行主动清理后(Activity 关闭),会把资源添加到Cache中
- 磁盘缓存
Bitmap pool 进行缓存 ,同样使用Lru ,再创建 Bitmap的时候 会从 Bitmap pool中1取 。
toDo :什么情况下,如何存入 。