Android 4.4之后,HttpURLConnection底层实现已被OkHttp替换。可以见得OkHttp的性能已经被Google所认同。对于为何会想深入了解该库的原因:因为它的最底层走到了java的Socket;利用向Socket写入特定的Http协议数据包,实现网络通信。学习该开源项目,对于网络的学历大有益处,除此之外OkHttp使用了缓存和线程池概念。总之个人觉得OkHttp开源项目可以作为学习网络通信一篇很好的教科书。
OkHttp的特点:
- 支持HTTP2/SPDY黑科技
- socket自动选择最好路线,并支持自动重连
- 拥有自动维护的socket连接池,减少握手次数
- 拥有队列线程池,轻松写并发
- 拥有Interceptors轻松处理请求与响应(比如透明GZIP压缩,LOGGING)
- 实现基于Headers的缓存策略。
OkHttp的使用:
- 创建OkHttpClient对象:OkHttpClient client = new OkHttpClient();
- 创建网络请求:Request request = new Request.Builder() .url("http://sethfeng.github.io/index.html") .build();
- 得到Call对象:Call call = client.newCall(request); //实际创建的是一个RealCall对象,RealCall中有一个对client对象的引用
- 发送同步请求:Response response = call.excute();
- 发送异步请求:
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
...
}
@Override
public void onResponse(Response response) throws IOException {
...
}
});