OkHttp源码总结

一、OKHttp  的核心类:

  dispatcher 分发器器类


OkHttp源码总结_第1张图片

二、OKhttp  同步方法总结:

1.创建httpClient和Request对象  (构建者模式)

2.讲Request封装成Call对象

3.调用call的execute()发送同步请求


三、OKhttp 同步注意事项

1.发送请求后就会进入阻塞状态,直到收到响应。


四、OKhttp  异步步方法总结:

1.创建okhttpClient和Request对象  (构建者模式)

2.讲Request封装成Call对象

3.调用call的enqueue()发送异步请求

五、OKhttp 异步请求注意事项

1.OnResponse 和onFailure 都是在子线程中执行的

六、同步方法和异步方法的区别

1.发起请求方法的调用

2.线程是否阻塞 ,同步阻塞异步不进行阻塞

七、主要请求流程图

OkHttp源码总结_第2张图片
基本流程01


OkHttp源码总结_第3张图片
主要请求流程图02

2.Enqueue 方法总结 

1.判断当前call

2.封装成一个AsyncCall对象

3.client.dispatcher().enqueue()

八、 请求线程线程最大数量和Host数量  


OkHttp源码总结_第4张图片
线程数量和host数量

九、getResponseWithInterceptorChain  拦截器的链

具体后面讲解

十、okhttp的任务调度

1.如何实现同步异步请求?

答:发送同步异步请求都会在dispatcher中管理其状态

2.什么是dispatcher?

答;dispatcher的作用为维护请求的状态,并维护一个线程池。用于执行请求。

十一、dispatcher讲解

1.

executorService 线程池

readyAsyncCalls  等待缓存的请求队列

runingSyncCalls 正在执行的异步请求队列


OkHttp源码总结_第5张图片
dispatcher核心的几个队列

2.异步请求为什么需要两个队列?

dispatcher 生产者

executorService 消费者池

readyAsyncCalls 等待缓存的请求队列

runingSyncCalls 正在执行的异步请求队列

十二、okhttp的任务调度

1.call执行完肯定需要在runningAsyncCalls队列中移除这个线程

那么readyAsyncCalls 队列中的线程在什么时候被执行呢

十三、okhttp的拦截器

1.拦截器是okhttp中提供的一种强大的机制,他可以实现网络监听、请求以及响应的重写、请求失败重试等功能。

OkHttp源码总结_第6张图片
拦截器

2.拦截器的种类

retryAndFo\ollowUpInterceptor

OkHttp源码总结_第7张图片
拦截器

十四、okhttp的拦截器链

1.getResponseWithInterceptorChain  拦截器的链


OkHttp源码总结_第8张图片
拦截器初始化

2.创建一个拦截器链ReallnterceptorChain 并执行拦截器的proceed方法

十五、okhttp的拦截器总结

1.在发起请求前对Request进行处理

2.调用下一个拦截器,获取response

3.对response进行处理,返回给上一个拦截器

十六、okhttp的拦截器的具体分析


1.retryAndFollowUpInterceptor重定向和失败重连拦截器

1.MAX_FOLLOW_UPS  最大重连次数 20

2.创建StreamAllocation 对象

3.创建一个拦截器链ReallnterceptorChain 并执行拦截器的proceed方法,进行网络请求

4.根据异常结果或响应结果判断是否要重新请求

5.调用下一个拦截器,对response进行处理,返回给上一个拦截器

2.BridgeInterceptor


OkHttp源码总结_第9张图片
主要 代码

1.是负责将用户构建的一个Request请求转换为能够进行网络访问的请求

2.将符合网络请求的Request进行网路请求

3.将网络请求回来的响应response 转化为用户可用的Response

4.添加网络请求缺失的请求头等信息

3.cacheInterceptor 缓存拦截器

1.get请求才缓存

2.Entry  包装类来方便缓存  entry.writeTo()方法进行具体缓存

3.DiskLruCache 缓存算法

4.ConnectInterceptor  网络拦截器

1.ConnectIntercepto获取Intercepto传过来的SteamAllocation

2.将http请求写入网络请求的io流中

3.将刚穿创建的用于网络的Io的RealConnection对象以及用于与服务器交互最为关键的HttpCodec等对象传递给后面的拦截器

4. 写入io的核心方法

十七、总结


OkHttp源码总结_第10张图片
总结


你可能感兴趣的:(OkHttp源码总结)