Glide备忘录

144 阅读1分钟

缓存架构

Glide中的缓存,按照对象类型分为两种:

  • Resource:当Target的Key与Resource完全匹配时,可以直接使用。在Disk Cache中是File形式
  • Data:从数据加载的原始图片文件,File形式

Target的Key: 包括数据源/长/宽/处理方式等组成。Resource包含的数据源(例如Bitmap),通过Java对象封装,Target就可使用。

另外为了避免Bitmap对象的频繁创建和释放,使用了BitmapPool 复用Bitmap对象

Glide中的缓存,按照存储方式分为两种:

  • Memory
    • active:类型 ResourceWeakReference 继承自WeakReference<EngineResource<?>>
    • LruCache Resource
  • Disk
    • Resource Cache File
    • Data Cache File 从数据源获取到的原始数据文件形式

request

  • Request:一次加载过程的数据封装对象
  • Target:into到的对象,使用数据源的目标对象。例如ImageViewTarget包含了ImageView。
  • Model:数据源,根据数据源选择不同的加载方式,同时可以用于构成Key。

RequestTarget互相持有对方引用。同时为了管理Request的请求暂停等过程,衍生了RequestTrackerTargetTrackerRequestManager等对象

任务调度

Engine,EngineJob以及DecodeJob

  • Engine:加载从Engine.load()开始,先从Memory取,如果没有则进入DecodeJob流程
  • DecodeJob:实际执行从Disk或网络加载图片数据到内存。从Disk或网络获取数据分属在不同的GlideExecutor。
  • EngineJob:实际是Engine与DecodeJob的纽带。帮DecodeJob切换这些线程池,处理DecodeJob回调。

Activity/Fragment生命周期绑定