okhttp的使用
1、OkhttpClient实例
2、通过Request.Builder构建出Request请求实例 (这之中通过add)其中get直接通过Request构建传参数,而post通过构建出RequestBody传参数(form表单FromBody)
form表单上传文件时候构建MultipartBody.Builder,而文件下载的时候与其他不同的是将获取response.body().byteStream()得到字节流就可以往本地写文件了
3、通过okhttpClient.newCall出的Call对象用来管理request请求
4、通过execute或者enqueue方法执行网络请求
Okhttp有点:
1、支持http2.0,允许链接到统一主机的接口共享统一socket进行通信,这样提高了效率
2、Gzip透明压缩减少了传输数据包的大小
3、响应缓存,避免同一个重复的网络请求
4、在http2.0下通过连接池减少请求的延迟
自动重连以及解决了SSL等问题
-
OkHttpClient.Builder
-
Request.Builder
-
FormBody.Builder
-
MultipartBody.Builder
-
Response.Builder
okhttp的Interceptors
Dispatcher中使用了线程池技术
public synchronized ExecutorService executorService() {
if (executorService == null) {
executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false));
}
return executorService;
}
反向代理
优点:
支持http2.0 http websocket (Android3.7中已经移除对spdy协议的支持转而大力支持http2.0),共享同一socket处理同一主机服务器请求、
支持gzip来减少网络请求数据流量
缓存响应数据来减少重复的网络请求
Okhttp的总体设计