一、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 主要请求流程图022.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 未完待续!!!
网友评论