OkHttp源码总结

作者: 微尘_8957 | 来源:发表于2018-09-03 00:42 被阅读29次

    一、OKHttp  的核心类:

      dispatcher 分发器器类

    二、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.线程是否阻塞 ,同步阻塞异步不进行阻塞

    七、主要请求流程图

    基本流程01 主要请求流程图02

    2.Enqueue 方法总结 

    1.判断当前call

    2.封装成一个AsyncCall对象

    3.client.dispatcher().enqueue()

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

    线程数量和host数量

    九、getResponseWithInterceptorChain  拦截器的链

    具体后面讲解

    十、okhttp的任务调度

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

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

    2.什么是dispatcher?

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

    十一、dispatcher讲解

    1.

    executorService 线程池

    readyAsyncCalls  等待缓存的请求队列

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

    dispatcher核心的几个队列

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

    dispatcher 生产者

    executorService 消费者池

    readyAsyncCalls 等待缓存的请求队列

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

    十二、okhttp的任务调度

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

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

    十三、okhttp的拦截器

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

    拦截器

    2.拦截器的种类

    retryAndFo\ollowUpInterceptor

    拦截器

    十四、okhttp的拦截器链

    1.getResponseWithInterceptorChain  拦截器的链

    拦截器初始化

    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

    主要 代码

    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的核心方法

    1.51   未完待续!!!

    相关文章

      网友评论

        本文标题:OkHttp源码总结

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