OKHttp -- 工作流程分析

图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 -- 结构分析

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、OkHttp 的基本使用 OkHttp 是 Square 的一款应用于 Android 和 Java 的 Ht...
    开发者如是说阅读 4,463评论 0 14
  • OkHttp源码分析 在现在的Android开发中,请求网络获取数据基本上成了我们的标配。在早期的Android开...
    BlackFlag阅读 2,790评论 0 5
  • 1、说明 经翻译之后的结果如下HTTP是现代应用网络的方式。这是我们交换数据和媒体的方式。高效地执行HTTP可以使...
    Kevin_Lv阅读 3,097评论 0 1
  • 前言 用OkHttp很久了,也看了很多人写的源码分析,在这里结合自己的感悟,记录一下对OkHttp源码理解的几点心...
    Java小铺阅读 5,400评论 0 13
  • 这篇文章主要讲 Android 网络请求时所使用到的各个请求库的关系,以及 OkHttp3 的介绍。(如理解有误,...
    小庄bb阅读 4,960评论 0 4