Okhttp - 1框架流程分析

本文介绍了OkHttp的执行流程,从创建OkHttpClient单例开始,到构建Request对象,通过RealCall获取Call对象并将其加入Dispatcher分发器。Dispatcher维护线程池处理同步和异步请求。接着详细阐述了拦截器链的作用,包括RetryAndFollow重试和重定向、Bridge设置请求头、Cache管理缓存、Connect连接管理和CallServer实际发起网络请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OkHttpClient:(第一步)客户端的对象,表示所有HTTP请求的客户端的类,我们在执行的时候,只会创建一次,然后将它作为一个全局的实例进行保存,这样我们在OkHttp的其他地方调用的时候,只会使用到这一个单例对象。
Request:(第二步)创建一个Request对象,封装了一些请求报文信息、请求URL地址、请求的方法(get\post等)、各种请求头,在它内部通过build,就是构建着模式链式生成我们Request对象。
RealCall:通过调用Request对象的newCall方法,来得到一个Call对象。这个Call的实现类就是RealCall,代表的就是一个实际的Http请求,它是连接Request和Response一个桥梁,有了这个Call才能进行下面的异步、同步操作。 RealCall在执行任务的时候,它会把它的请求添加到Dispatcher当中的单元里来。   
Dispatcher:分发器类,在这个类的内部维护了一个线程池,这个线程池就是维护网络请求的,包括我们的同步和异步。Dispatcher当中有三个队列来维护我们的同步、异步请求。
interceptors:拦截器,来进行真正的服务器数据获取。它会构建一个拦截器链,然后通过依次执行这个拦截器链中的每一个拦截器,来将我们服务器获得的数据返回。一共5个拦截器。
RetryAndFollow:第一个拦截器,主要负责两部分逻辑,1)在网络请求失败后,我们会进行重试。2)服务器返回当前请求,需要重定向的时候,我们会直接发起请求。
Bridge:第二个拦截器,这个桥接的拦截器,它主要负责一些设置内容请求长度、编码、压缩,同时还可以添加cookie,为它设置其它的报头,主要是一些请求前的操作。
Cache:第三个拦截器,负责缓存的管理,当网络请求有符合要求缓存的时候,我们可以去直接返回Cache给我们的客户端。直接使用就可以了。
Connect:第四个拦截器,为当前的请求找到一个合适的连接,这里要注意,我们有可能会复用又的连接,如果这连接是可以被复用的话,我们就不用再去重新创建了,这部分拦截器还涉及到连接池的概念。
CallServer:第五个拦截器,负责向服务器发起真正的网络请求,然后接收到服务器返回给我们读取后并返回,主要就是做网络连接这块东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值