[置顶] 【Android okhttp源码解析 二】同步请求流程和源码分析
2018-04-01 00:24
691 查看
1. 创建OkHttpClient对象
这里使用Builder模式来给OkHttpClient对象的成员变量赋值,这里最重要的两个成员变量时dispatcher和connectionPool。其中,
(1)[b]dispatcher是一个分发器类,由它决定网络请求是直接处理还是缓存等待,对于同步请求,这个分发器只是把同步请求放到队列当中。[/b]
(2)[b]connectionPool是一个连接池,客户端和服务端之间的连接可以抽象为一个connection,而每一个connection我们都把它放到连接池中,由它来进行统一的管理,例如,当请求的url相同时就可以选择复用。[/b]
2. 创建Request对象
Request对象携带了请求报文的一些信息,如url地址,请求方法,请求头等。3. 创建Call对象
Call对象代表了一个实际的http请求。由于Call是一个接口,其实际请求都是通过RealCall来实现的。我们来看下RealCall的实现
首先创建一个RealCall,然后给一个监听赋值。我们来看看RealCall的构造方法里做了什么
可以看到RealCall持有了client对象和request对象,并初始化了一个重定向拦截器。
4. 执行请求
我们知道执行请求其实就是调用Call对象的execute方法,而实际调用的是RealCall的execute方法,我们来看一下。我们这里主要关注一下主流程,首先执行okHttpClient的dispatcher的execute()方法
我们看到,execute()方法其实就是将Call对象加入同步队列当中,dispatcher负责请求的分发,依次去执行同步队列里的请求。
除了同步执行队列runningSyncCalls,还有异步执行队列runningAsyncCalls和异步就绪队列readyAsyncCalls。
在执行完execute()方法后,会调用getResponseWithInterceptorChain()方法来获取response,在这个方法里会依次调用拦截器来进行相应操作。
这里还要注意,在拿到response后还调用了dispatcher的finish方法。
这里是把当前请求从runningSyncCalls队列中移除,接着计算所有正在执行的同步请求和异步请求队列中请求数,如果请求数为0则回调idleCallback()方法。
可以看到,同步请求的执行方法的执行过程比较简单,主要就是保存同步请求和移除同步请求。
相关文章推荐
- [置顶] 【Android okhttp源码解析 三】异步请求流程和源码分析
- OKHttp网络框架源码解析(一)okHttp框架同步异步请求流程和源码分析
- [置顶] 【Android okhttp源码解析 五】拦截器流程和源码解析
- Okhttp3源码(1)---同步异步请求流程解析
- Android恢复出厂设置流程分析【Android源码解析十】
- Android恢复出厂设置流程分析【Android源码解析十】
- okhttp框架源码分析之同步请求
- Android网络编程(四)源码解析OkHttp前篇[请求网络]
- Android恢复出厂设置流程分析【Android源码解析十】
- [置顶] 【Android okhttp源码解析 一】okhttp框架简单介绍
- Android恢复出厂设置流程分析【Android源码解析十】
- Android恢复出厂设置流程分析【Android源码解析十】
- OkHttp源码解读总结(三)--->OkHttp同步请求源码解析
- [置顶] 【Android okhttp源码解析 四】任务调度核心类dispatcher解析
- 源码解析--Android视图状态及重绘流程分析
- Android恢复出厂设置流程分析【Android源码解析十】
- Okhttp3 源码解析(异步同步请求)
- Android网络编程(七)源码解析OkHttp前篇[请求网络]
- okhttp源码分析之同步、异步请求
- Android OkHttp 的源码解析 (一) 同步解析