介绍
OkHttp
OkHttp是由Square公司提供的处理网络请求的开源库,有以下特性:
- 支持Http2.0,对一台机器的所有请求共享同一个socket
- 内置连接池,支持连接复用,减少延迟
- Interceptors(拦截器)轻松处理请求与响应,支持透明的GZIP压缩响应体
- 请求失败时自动重连
- 拥有队列线程池,轻松写并发
- 基于Headers的缓存策略
Retrofit
Retrofit也是Square公司产品,是对OkHttp的封装,将网络请求交给OkHttp,自身就可以通过简单的配置就可以进行网络请求了(后面讨论的Retrofit都是2.0版本)
- 请求可以通过注解的方式定制
- 支持同步、异步和RXjava
- 解耦
- 可以对json、xml等响应数据通过不同的反序列工具来解耦
- 设置网络请求日志(很多好用的api)
使用方法
不做具体介绍,可以看官方使用文档:OkHttp、Retrofit
- 同步请求
- 异步请求
- get请求
- post请求
- 缓存设置
- 取消缓存
- 支持请求回调,直接返回对象、对象集合
…
请求流程
OkHttp部分源码解析
* newCall--实际是调用realCall
protected RealCall(OkHttpClient client, Request originalRequest) {
this.client = client;
this.originalRequest = originalRequest;
this.retryAndFollowUpInterceptor = new RetryAndFollowUpInterceptor(client);
}
* excuate()--先判断这个请求是否执行了,然后通过getResponseWithInterceptorChain()获取响应
@Override
public Response execute() throws IOException {
synchronized (this) {
if (executed) throw new IllegalStateException("Already Executed"); //(1)
executed = true;
}
try {
client.dispatcher.executed(this);