「Glide」源码解析系列
承前启后
RequestManager上所有的Request归RequestTracker统一管理
Request开始加载了,这节就来看看Request
此节涉及到的类有
SingleRequest
StateVerifier
StateVerifier
requestTracker调用了request的begin方法
最开始的两个方法进行状态判断
- assertNotCallingCallbacks:判断request是否正在回调,回调中调用begin则会抛出异常
回调时通过设置isCallingCallbacks标识
- stateVerifier用来标识此request是否是被回收的状态
StateVerifier本身是抽象类,通过setRecycled设置是否回收标识,判断时调用throwIfRecycled方法,内部进行相应的异常处理
SingleRequest变量stateVerifier由StateVerifier的静态方法生成
Request开始工作的时候就会判断当前状态是否正常,否则就抛异常
request对象是放在FactoryPools中的,复用在所难免。那request对象是在什么时候重置的状态呢?
代码中可以看出,request在从池子中取出时,就重置了状态。
单独拿出StateVerifier来讲,不是源码有很多技巧,而是这种设计模式:抽出专门的类来进行对象状态的管理,降低了耦合性,提高了类功能的专一性
model
状态正常,流程继续
当model为null便回调onLoadFailed,那model是什么
涉过千山万水,终于找到了。外部通过load方法传入的对象
类型有:Bitmap、Drawable、String、Uri、File、Integer、URL、byte等
到此大概有个概念,load的为要加载的原始资源如上一行所列,as的是加载资源后要转换的类型如asDrawable,model在此就充当了原始资源,如网络图片URL、图片流byte、资源图片id等
status
有了model,继续往下走
status是request当前的状态标识,在request的初始化的时候status = Status.PENDING
最终都会进入onSizeReady方法
修改了status = Status.RUNNING,engine.load就结束了
返回到begin方法
刚修改的status = Status.RUNNING,派上了用场
回调target.onLoadStarted,并将占位图回调回去
诶??
status = Status.RUNNING表示request正在工作啊!!那
请求的图片呢?问什么没有网络请求获取图片流?裁剪图片?等一系列加载图片的步骤呢?
哪里漏掉了?
这里面做了什么?下节继续
总结
RequestTracker启动了request对象
request对象将更加详细的请求参数汇总,并load进engine
这里request对象主要起到记录加载过程中所处的阶段