HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比,如何选择?

今天突然想起有必要总结一下市面上通用的一些网络请求方式,主要通过分析其优缺点和性能,为以后选择网络请求连接方式提供支持。现在常用的网络请求方式主要有:HttpClient、HttpURLConnection、OKHttp和Volley

一、 HttpClient:
HttpClient 是Apache 的一个三方网络框架,网络请求做了完善的封装,api众多,用起来比较方便,开发快。实现比较稳定,bug比较少,但是正式由于其api众多,是我们很难再不破坏兼容性的情况下对其进行扩展。所以,Android 团队对提升和优化httpclient积极性并不高。android5.0被废弃,6.0逐渐删除。
二、HttpURLConnection
HttpURLConnection是一个多用途、轻量级的http客户端。它对网络请求的封装没有HttpClient彻底,api比较简单,用起来没有那么方便。但是正是由于此,使得我们能更容易的扩展和优化的HttpURLConnection。不过,再android2.2之前一直存在着一些令人烦的bug,比如一个人可读的inputstream调用它的close方法的时候,会使得连接池实效,通常的做法就是禁用连接池。因此,在android2.2之前建议使用稳定的HttpClient,android2.2之后使用更容易扩展和优化的HttpURLConnection。
三、okhttp
  1. 支持Android 2.3及其以上版本;
  2. 支持Java JDK 1.7以上版本;

okhttp是专注于提升网络连接效率的http客户端。
1、它能实现同一ip和端口的请求重用一个socket,这种方式能大大降低网络连接的时间,和每次请求都建立socket,再断开socket的方式相比,降低了服务器服务器的压力。
2、okhttp 对http和https都有良好的支持。
3、okhttp 不用担心android版本变换的困扰。
4、成熟的网络请求解决方案,比HttpURLConnection更好用。
4、缺点,okhttp请求网络切换回来是在线程里面的,不是在主线程,不能直接刷新UI,需要我们手动处理。封装比较麻烦。

四、Volley
Volley是google在2013 io大会上推出的网络通信框架,特别适合处理数据量小,通信频繁的网络操作。优点是内部封装了异步线程,可直接在主线程请求网络,并处理返回的结果。同时可以取消请求,容易扩展。缺点是:面对大数据量的请求,比如下载表现糟糕,不支持https。Volley的底层在针对android2.3以下系统使用httpclicent,在android2.3以上采用HttpUrlConnection请求网络。

本公司的选择:
公司使用Volley框架来处理网络请求,但是,当数据量需求越来大的时候,Volley在面对大数据量的网络请求的表现并不好,加上公司大量采用https协议。于是,公司网络请求采用了Volley+okhttp。正如我们采用这种方式的优势有:
1、okhttp 不用担心android版本变换的困扰。
2、okhttp 对大数据量的网络请求支持非常好。
3、okhttp 同时支持http和https
4、okhttp 重用socket连接,网络请求效率非常高。
5、Volley框架在异步请求的封装非常好,对子线程网络请求,主线程更新UI支持非常好。能像Image-Loader 一样轻松加载网络图片。
总之,网络请求底层采用okhttp,异步回调使用Volley框架。

后续还有对xutils 和 Retrofit2 的分析。

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android中的网络通信可以使用Java中的标准网络API,如HttpURLConnectionHttpClient,也可以使用第三方库,如OkHttpVolley。 使用HttpURLConnection进行网络通信的基本步骤如下: 1. 创建URL对象,指定要访问的URL地址。 2. 调用openConnection()方法,获取URLConnection对象。 3. 设置请求方法和请求头信息。 4. 发送请求,获取服务器响应。 5. 处理响应数据。 下面是一个使用HttpURLConnection进行GET请求的示例代码: ```java URL url = new URL("http://www.example.com/api/data"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = conn.getInputStream(); // 处理输入流中的数据 } else { // 处理错误响应 } conn.disconnect(); ``` 使用OkHttp进行网络通信的步骤也比较简单: 1. 创建OkHttpClient对象。 2. 创建Request对象,指定请求方法、请求URL和请求参数等信息。 3. 调用OkHttpClient对象的newCall方法创建Call对象,传入Request对象。 4. 调用Call对象的execute方法发送请求,获取服务器响应。 5. 处理响应数据。 下面是一个使用OkHttp进行GET请求的示例代码: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://www.example.com/api/data") .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { ResponseBody responseBody = response.body(); // 处理响应体中的数据 } else { // 处理错误响应 } ``` 除了GET请求,还可以使用POST、PUT、DELETE等请求方法进行网络通信,具体使用方法可以参考相关文档或示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值