Okhttp - 1框架流程分析

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:第五个拦截器,负责向服务器发起真正的网络请求,然后接收到服务器返回给我们读取后并返回,主要就是做网络连接这块东西。

猜你喜欢

转载自blog.csdn.net/androidsj/article/details/79979889