0Okhttp是Square开源的轻量级框架
网络请求的框架用于代替HttpurlConnection和httpclient。可以用来文件上传,下载,加载图片,网络请求,是根据build模式(将一个复杂对象的构建与它的表示分离),链式调用,每一个方法的返回值类型都是当前类的对象
ok如何去进行同步的get请求?
1.会创建okhttpClient对象
okhttpClient有两种创建方式

(1).直接new对象
(2).通过建造者Builde模式添加其他属性的操作
2.生成Request对象

一个请求可能包含一个特定内容
3.创建Response对象
响应就是对生成的Request对象的一个回复,包括状态码,http头

try catch里面的是同步请求的一个关键代码
这个call对象是代表一个request,response
通过调用newCall方法,并将request对象传入就可以获取call对象
4.执行同步的请求
调用call的execute这个方法
从内部可以看到call的execute是一个接口

如果这个call被设为true就说明已经被执行,如果这个时候再次被调用就会抛出异常,这就说明每一个call请求只能被调用一次,会打印一些异常信息

client.dispatcher就是获取一个调度器一个调度方法
executed就是在双向队列当中存放同步请求,在新创建的同步请求放入到队列当中然后去执行
okhttp提供两种类型的请求方式:
①.阻塞式的 ②.异步的非阻塞式的
不管是同步还是异步都会调用getResponswWithInterceptor()这个方法就是ok里面一个拦截器列的作用
拦截器可以重写,监听网络请求,在每一个拦截器内部都会调用下一个拦截器类的方法,这样就把整个不同的拦截器变成一个完整的闭环的一个拦截器列。所以不管是同步还是异步都会调用getResponswWithInterceptor()来完成里面的操作,实现遍历循环
最后会调用finish这个方法,意思就是执行完这个请求之后,要将这个请求从调度器中移除,最后返回。

总结 okhttp同步请求:RealCall、拦截器、dispatcher调度器
1.生成了一个okhttpClient对象
里面包含了很多对象,有很多其他的属性在构造函数当中复默认值dispatcher()
2.创建request对象和response对象
对于okhttp里面的请求和响应
3.通过call对象来操作请求
可以看到call是一个接口,就要用实现类RealCall完成具体的同步请求工作
4.RealCall
① realcall只能被调用一次,如果调用过一次再次调用会抛出异常
②okhttp内部调度器会将同步请求添加到队列当中
③okhttp会通过拦截器列做实际的网络请求工作
5.执行完毕之后将同步请求从Dispatcher中移除
网友评论