提问Glide - 缓存篇

2020-11-14  本文已影响0人  jiantaocd

都知道Glide有内存和磁盘缓存,它们的作用和读写场景是什么?

ActiveResources :HashMap + WeakReference

MemoryCache

ResourceCache

DataCache

为什么要设计活动资源(ActiveResources)缓存?

activeResources就是一个弱引用的HashMap,用来缓存正在使用中的图片。这样可以保护这些正在使用的图片不会被LruCache算法回收掉。

缓存算法如何实现的?

内存:LRUCache 、 LinkedHashMap
磁盘:基于LinkedHashMap自己实现的DiskLruCache;两层磁盘缓存使用了不同的key而已。

BitmapPool又是何用?

复用创建过的Bitmap对象。

当一个Bitmap从内存缓存 被动 的被移除(内存紧张、达到maxSize)的时候并不会被recycle。而是加入这个BitmapPool,只有从这个BitmapPool 被动被移除的时候,Bitmap的内存才会真正被recycle释放。

使用条件: 参考文档

Bitmap在什么情况下才被recycle释放内存?

  1. 如果bitmap对象无法复用,在内存缓存中被算法剔除后就会调用recycle释放内存。
  2. 当一个bitmap对象在bitmapPool中被算法移除时。

App内存吃紧时如何避免OOM?

监听onLowMemory、onTrimMemory回调,及时释放memoryCache、bitmapPool、arrayPool

参考

能力有限,错误难免,如您发现,还望赐教,评论交流,私信讨论。

上一篇下一篇

猜你喜欢

热点阅读