okhttp和httpurlconnection之间的区别?

时间:2017-01-10 14:57:32

标签: android httpurlconnection okhttp

这两个库之间有什么区别?

我如何理解这两个lib之间存在差异,因为Volley使用httpurlconnection和Retrofit okhttp ....

但我不明白它们之间的区别以及两种解决方案的利弊。什么时候okhttp更好,何时httpurlconnection?

我想知道所以我知道何时应该使用它们。

编辑:

为什么android使用okhttp进行httpurlconnection?如果我没有错,httpurlconnection没有使用okhttp

3 个答案:

答案 0 :(得分:8)

okHttp的优点 可以为每个请求轻松定制OkHttp - 例如每个请求的超时定制等。 当网络很麻烦时, OkHttp 坚持不懈:它会从常见的连接问题中无声地恢复。如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。

可以获取任何请求的完整分析。您可以知道发送的字节数,接收的字节数以及任何请求所花费的时间。这些分析很重要,因此您可以找到应用程序的数据使用情况以及每个请求所花费的时间,以便您可以识别缓慢的请求。

使用OkHttp很简单。它的请求/响应API采用流畅的构建器和不变性设计。它支持同步阻塞调用和带回调的异步调用。

OkHttp支持Android 2.3及更高版本。对于Java,最低要求是1.7。

答案 1 :(得分:2)

API不同,我个人更喜欢OkHttp。

请注意,从Android 4.4开始,网络层(以及HttpUrlConnection API)也是通过OkHttp实现的。

答案 2 :(得分:0)

HttpURLConnection

优势:

  • 轻巧的api有助于简化管理并减少 兼容性问题。
  • 借助以下方法自动处理缓存机制 HttpResponseCache。
  • 减少网络使用量,并减少电池消耗。

查询参数:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}

Android标头示例:

conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);

OkHttp

优势:

  • 连接池
  • 压缩
  • 缓存
  • 从网络问题中恢复
  • 重定向
  • 重试
  • 支持同步和异步调用

查询参数:

HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get).newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();

Android标头示例:

Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();