美文网首页
OKHttp -- 工作流程分析

OKHttp -- 工作流程分析

作者: Jcccccccccc | 来源:发表于2018-02-02 10:33 被阅读81次
图1:工作流程图

工作分析:

1、创建Call

同步:

2、将Call直接添加到Dispatcher的runningAsyncCalls队列中,同时
3、调用getResponseWithInterceptorChain进入链式工作流程
4、将Response返回给调用者
5、调用Dispatcher的finish移除该Call,并调用promoteCalls检查队列,执行等待的请求

异步

2、将使用Callback为参数创建AsyncCall对象,并将其添加到Dispatcher的队列中,等待队列执行
3、队列中取出待执行的请求,使用线程池执行AsyncCall(继承Runnable),执行getResponseWithInterceptorChain,并将结果通过callback返回

Dispatcher中的三个队列:

  • readyAsyncCalls:准备运行的异步请求
  • runningAsyncCalls:正在运行的异步请求
  • runningSyncCalls:正在运行的同步请求

getResponseWithInterceptorChain中拦截器的工作分析

链的工作流程:
1、在getResponseWithInterceptorChain创建链条,并执行proceed方法 (图2所示)
2、在链条的proceed方法中,取出拦截器,并调用拦截器的intercept方法(图3所示)
3、intercept方法中,对请求进行处理,然后通过链条的proceed获取返回(图4所示)
4、此时的链条的index已经加1,proceed中拿到下一个拦截器,然后执行第3步;如此递归到最后一个拦截器执行第5步
5、最后一个拦截器获取到返回之后,依次递归,每个拦截器去处理返回的response,然后返回给上一个拦截器处理
6、执行到最后回到第一个链的起点,把数据返回给对应的调用(图2的retrun)

图2:创建链并开始执行的代码 图3:proceed方法的主要代码 图4:Interceptor的intercept方法
对于每个拦截器的功能可以查看上一篇文章OKHttp -- 结构分析

相关文章

网友评论

      本文标题:OKHttp -- 工作流程分析

      本文链接:https://www.haomeiwen.com/subject/tdljzxtx.html