来源 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库:
会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。
使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。
OKHttp源码位置https://github.com/square/okhttp
使用
简单使用代码
- private final OkHttpClient client = new OkHttpClient();
- public void run() throws Exception {
- Request request = new Request.Builder()
- .url("https://api.github.com/repos/square/okhttp/issues")
- .header("User-Agent", "OkHttp Headers.java")
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Accept", "application/vnd.github.v3+json")
- .build();
- Response response = client.newCall(request).execute();
- if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
- System.out.println("Server: " + response.header("Server"));
- System.out.println("Date: " + response.header("Date"));
- System.out.println("Vary: " + response.headers("Vary"));
- }
在这里使用不做详细介绍,推荐一篇关于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
(#换成@)。