你的位置:首页 > 软件开发 > 操作系统 > Android OkHttp详解

Android OkHttp详解

发布时间:2016-09-18 22:01:19
来源 http://frodoking.github.io/2015/03/12/android-okhttp/编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为 ...

来源 http://frodoking.github.io/2015/03/12/android-okhttp/

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!

Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP 可以让您的应用运行更快、更节省流量。而OkHttp库就是为此而生。

OkHttp是一个高效的HTTP库:

  • 支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求

  • 如果SPDY不可用,则通过连接池来减少请求延时

  • 无缝的支持GZIP来减少数据流量

  • 缓存响应数据来减少重复的网络请求

会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。

使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。

OKHttp源码位置https://github.com/square/okhttp

使用

简单使用代码

  1. private final OkHttpClient client = new OkHttpClient();
  2. public void run() throws Exception {
  3.     Request request = new Request.Builder()
  4.         .url("https://api.github.com/repos/square/okhttp/issues")
  5.         .header("User-Agent", "OkHttp Headers.java")
  6.         .addHeader("Accept", "application/json; q=0.5")
  7.         .addHeader("Accept", "application/vnd.github.v3+json")
  8.         .build();
  9.     Response response = client.newCall(request).execute();
  10.     if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
  11.     System.out.println("Server: " + response.header("Server"));
  12.     System.out.println("Date: " + response.header("Date"));
  13.     System.out.println("Vary: " + response.headers("Vary"));
  14. }

在这里使用不做详细介绍,推荐一篇关于OKHttp的详细使用教程,下面转入源码的分析。

总体设计

Android OkHttp详解从OkHttpClient类的整体设计来看,它采用门面模式来。client知晓子模块的所有配置以及提供需要的参数。client会将所有从客户端发来的请求委派到相应的子系统去。在这里继续使用上一节中讲到的运行堆栈图。从Call.getResponse(Request request, boolean forWebSocket)执行Engine.sendRequest()和Engine.readResponse()来详细说明一下。sendRequest()这张图画得比较简单,详细的过程以及连接池的使用下面大致说明一下:

1、连接池是暴露在client下的,它贯穿了Transport、HttpEngine、Connection、HttpConnection和SpdyConnection;在这里目前默认讨论HttpConnection;

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Android OkHttp详解

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录