1. OkHttp有哪些优势
支持http2,对一台机器的所有请求共享同一个socket
内置连接池,支持连接复用,减少延迟
支持透明的gzip压缩响应体
通过缓存避免重复的请求
请求失败时自动重试主机的其他ip,自动重定向
丰富的API,可扩展性好
2. OkHttp使用
//1.创建OkHttpClient
OkHttpClient client = new OkHttpClient();
//2.创建Request,并填入url信息
String run(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
//3.同步请求
Response response = client.newCall(request).execute();
//4.异步请求
client.newCall(request).enqueue(responseCallback);
3. OkHttp运用的设计模式
- 责任链模式(拦截器的链式调用)
- 策略模式(在CacheInterceptor中,在响应数据的选择中使用了策略模式,选择缓存数据还是选择网络访问。)
4. OKHttp的拦截器链
- 应用拦截器: 拿到的是原始请求,可以添加一些自定义header、通用参数、参数加密、网关接入等等。
- RetryAndFollowUpInterceptor: 处理错误重试和重定向
- BridgeInterceptor: 应用层和网络层的桥接拦截器,主要工作是为请求添加cookie、添加固定的header,比如Host、Content-Length、Content-Type、User-Agent等等,然后保存响应结果的cookie,如果响应使用gzip压缩过,则还需要进行解压。
- CacheInterceptor: 缓存拦截器,如果命中缓存则不会发起网络请求。
- ConnectInterceptor: 连接拦截器,内部会维护一个连接池,负责连接复用、创建连接(三次握手等等)、释放连接以及创建连接上的socket流。
- networkInterceptors:(网络拦截器) 用户自定义拦截器,通常用于监控网络层的数据传输。
- CallServerInterceptor: 请求拦截器,在前置准备工作完成后,真正发起了网络请求。
5.
版权声明:本文为qq_37442823原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。