比较的指标:

1、cpu

2、流量

3、电量

4、内存占用

5、联网时间

功能点:

1、重试机制

2、提供的扩展功能

3、易用性

4、是否https

5、是否支持reflect api,OkHttp有配套方法

6、缓存、重试

7、cookie支持session id会话支持

8、弱网性能和稳定性

9、超时时间,几种超时时间 连接超时,响应超时

10、适配各种机型、4.4和之前版本 2.3 4.1 5.0

4种网络连接方式提供的功能对比表格:

Ps:稳定性:四种网络连接方式都在业内广泛应用,都比较稳定。

特别指出的是,在 Froyo(2.2)之前,HttpURLConnection有个重大 Bug,调用close()函数会影响连接池,导致连接复用失效,所以在 Froyo 之前使用HttpURLConnection需要关闭keepAlive。

另外,在 Gingerbread(2.3) HttpURLConnection 默认开启了 gzip 压缩,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了请求结果缓存。

再加上HttpURLConnection本身API相对简单,所以对Android来说,在2.3之后建议使用HttpURLConnection,之前建议使用HttpClient。

功能对比表格参考的博客:

HttpClient Cookie:

http://zzc1684.iteye.com/blog/2162858

HttpClient 重试机制:

http://blog.csdn.net/weborn/article/details/9112309

Volley源码解析:

http://p.codekk.com/blogs/detail/54cfab086c4761e5001b2542

HttpURLConnection设置请求Cookie:

http://hw1287789687.iteye.com/blog/2240085

OkHttp Cookie管理:

https://segmentfault.com/a/1190000004345545

Volley CookieSession:

http://my.oschina.net/liusicong/blog/361853

HttpClient Session保持:

http://www.flysnow.org/2013/11/21/android-httpclitent-session-keep.html

1、HttpClient 缺点罗列

Apache HttpClient早就不推荐httpclient,5.0之后干脆废弃,后续会删除。6.0删除了HttpClient。Java开发用HttpClient,官方推荐android开发用HttpUrlConnection。

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。

但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以,目前Android团队在提升和优化HttpClient方面的工作态度并不积极。

高效稳定,但是维护成本高昂,故android 开发团队不愿意在维护该库而是转投更为轻便的HttpUrlConnection。

2、HttpURLConnection

HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。

不过在Android 2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:

在Android 4.0版本中,我们又添加了一些响应的缓存机制。当缓存被安装后(调用HttpResponseCache的install()方法),所有的HTTP请求都会满足以下三种情况:

比较轻便,灵活,易于扩展

在3.0后以及4.0中都进行了改善,如对HTTPS的支持

在4.0中,还增加了对缓存的支持

在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,2.3之前使用HttpClient。

3、OkHttp优点较多

OkHttp是一个现代,快速,高效的Http client,支持HTTP/2以及SPDY(SPDY介绍网址:https://zh.wikipedia.org/wiki/SPDY,SPDY(发音如英语:speedy),一种开放的网络传输协议,由Google开发),它为你做了很多的事情。

OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和HTTP缓存。

支持SPDY,可以合并多个到同一个主机的请求

OkHttp实现的诸多技术如:连接池,gziping,缓存等就知道网络相关的操作是多么复杂了。

OkHttp扮演着传输层的角色。

OkHttp使用Okio来大大简化数据的访问与存储,Okio是一个增强 java.io 和 java.nio的库。

OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。

OkHttp还处理了代理服务器问题和SSL握手失败问题。

OkHttp是一个Java的HTTP+SPDY客户端开发包,同时也支持Android。需要Android 2.3以上

OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。

默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题。

如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。

从Android4.4开始HttpURLConnection的底层实现采用的是okHttp

缓存响应避免重复的网络请求

目前,该封装库志支持:

• 一般的get请求

• 一般的post请求

• 基于Http的文件上传

• 文件下载

• 上传下载的进度回调

• 加载图片

• 支持请求回调,直接返回对象、对象集合

• 支持session的保持

• 支持自签名网站https的访问,提供方法设置下证书就行

• 支持取消某个请求

为什么要做缓存,或者说有什么好处?

减少服务器负荷,降低延迟提升用户体验。

复杂的缓存策略会根据用户当前的网络情况采取不同的缓存策略,比如在2g网络很差的情况下,提高缓存使用的时间;不用的应用、业务需求、接口所需要的缓存策略也会不一样,有的要保证数据的实时性,所以不能有缓存,有的你可以缓存5分钟,等等。你要根据具体情况所需数据的时效性情况给出不同的方案。当然你也可以全部都一样的缓存策略,看你自己。

4、Volley

Volley是一个简化网络任务的库。他负责处理请求,加载,缓存,线程,同步等问题。它可以处理JSON,图片,缓存,文本源,支持一定程度的自定义。

Volley在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。
Volley的基本用法,网上资料无数,这里推荐郭霖大神的博客
Volley存在一个缓存线程,一个网络请求线程池(默认4个线程)。
Volley这样直接用开发效率会比较低,我将我使用Volley时的各种技巧封装成了一个库RequestVolly.
我在这个库中将构造请求的方式封装为了函数式调用。维持一个全局的请求队列,拓展一些方便的API。

不过再怎么封装Volley在功能拓展性上始终无法与OkHttp相比。
Volley停止了更新,而OkHttp得到了官方的认可,并在不断优化。
因此我最终替换为了OkHttp

OkHttp使用Okio进行数据传输。都是Square家的。
但并不是直接用OkHttp。Square公司还出了一个Retrofit库配合OkHttp战斗力翻倍。

网络加载库:Picasso、Fresco,所以我更喜欢Glide

不过现在主流的网络请求都是用Volley,OkHttp呼声也很高。

Volley是为RPC网络操作而设计的,适用于短时操作。

Volley默认在Froyo上使用Apache Http stack作为其传输层,在Gingerbread及之后的版本上使用HttpURLConnection stack作为传输层。原因是在不同的安卓版本中这两种http stack各自存在一些问题。

Volley可以轻松设置OkHttp作为其传输层。

Volley是谷歌开发的。

Volley可以说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕
Volley提供了:JsonObjectRequest、JsonArrayRequest、StringRequest、ImageRequest、NetworkImageView等Request形式。

Volley的优点很多,可拓展、结构合理、逻辑清晰、能识别缓存、通过统一的方式,获取网络数据,包括且不限于文本、图片等资源。用了一段时间,果断放弃以前用过的其他框架。

Volley在一开始创建请求队列的过程中,需要创建网络线程和缓存线程,同时还需要初始化基于Disk的缓存,这中间有大量的资源开销和IO操作,所有才会慢。

4种方式的比较:

1、HttpClient: 在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。

2、HttpURlConnection: 而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。

对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。

谷歌自己也是推荐用HttpUrlConnection,对它进行了大量的优化,这个从安卓的帮助文档可以看出来:

http://developer.android.com/reference/java/net/HttpURLConnection.html

3、OkHttp:是一个相对成熟的解决方案,我们更有理由相信OkHttp的强大。

Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。

OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。

如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。

OkHttp还处理了代理服务器问题和SSL握手失败问题。

使用 OkHttp 无需重写您程序中的网络代码。

OkHttp实现了几乎和java.NET.HttpURLConnection一样的API。

其实现在嘛,两者都不用,就用Okhttp
HttpUrlConnection现在的底层实现就是通过Okhttp

网络请求框架支持的功能:

1、支持自定义请求的Header

2、支持Http的基本请求方法:GET、POST

3、支持文件上传和下载

4、可以加载图片

5、支持多任务网络请求操做

6、支持缓存

7、支持请求回调

8、支持session的保持

网络优化建议点:

1、连接复用节省连接建立时间,如开启keep-alive

2、不用域名,用IP直连省去DNS解析过程,根据域名得到IP地址

参考博客:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html

http://blog.csdn.net/zhangcanyan/article/details/51661448

一、性能指标对比

测试手机:小米MI3(4.4.4)、魅蓝2(5.1)

测试版本:书旗Android 9.9.0

测试环境:直连下wifi访问

测试方法:安装并开启易测APP,安装网络框架apk,进行联网请求(http://www.csdn.net/),请求多次进行测试。

测试结果计算:测试3次。

误差说明:第三方软件计算,受后台应用影响,存在一定误差。

1、CPU占用

误差说明:第三方软件计算,受后台应用影响,存在一定误差。

结论:测试机型总体上CPU占用率,OkHttp的网络请求略低于其它联网方式。

2、内存消耗

误差说明:第三方软件计算,受后台应用影响,存在一定误差。

结论:测试机型总体上内存占用情况,在小米手机上,OkHttp的网络请求消耗内存略低于其它联网方式。在魅族手机上,内存消耗略高于其它方式。显示出测试机型内存消耗表现不一。

3、电量消耗

误差说明:第三方软件计算,受后台应用影响,存在一定误差。

结论:OkHttp的网络请求消耗的电量百分比在略低于其它联网方式,消耗的总电量在小米手机上高于其它联网方式,在魅族手机上略低于其它联网方式。消耗电量的差异不大,在0.5mah以内。

4、流量消耗

误差说明:网络请求的发送和接收流量存在一定误差。

结论:

1、网络发送流量HttpURLConnection最高,Volley次之,OKHttp第三位,HttpClient最少。但是,数据量差别不大,零点几的请求差别。

2、累积接收流量HttpClient最大,HttpURLConnection和Volley相同,OkHttp略大于前两者。

5、联网平均耗时

误差说明:网络的状况可能会影响网络请求时间。

结论:网络请求平均耗时HttpClient最大,HttpURLConnection最小,Volley平均比前者高10ms~20ms,OkHttp比Volley高20ms~40ms。

综上得出最终结论:

1、对于新的应用程序,应该更加偏向于使用HttpURLConnection,因为在以后的工作当中Google也会将更多的时间放在优化HttpURLConnection上面。

谷歌自己也是推荐用HttpUrlConnection,对它进行了大量的优化,这个从安卓的帮助文档可以看出来:

http://developer.android.com/reference/java/net/HttpURLConnection.html

2、对于已经成熟的应用, Volley停止了更新,而OkHttp得到了官方的认可,并在不断优化。

因此我建议使用OkHttp,现在最新稳定版为3.2.0

.

Android4种网络连接方式的比较相关推荐

  1. 虚拟机几种网络连接方式的区别

    虚拟机,不论是VirtualBox还是VMWare,都提供了几种网络连接方式,其中包括了桥接(Bridged).网络地址翻译(NAT)和主机模式(Host-only). 桥接(Bridged)相当于在 ...

  2. 电信设置的nat 虚拟服务器192.168.1.3 是什么,VMware WorkStation的三种网络连接方式详解...

    一. 首先贴出本人在网络上找到与VMware网络连接相关的知识 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是host ...

  3. 虚拟机linux和主机网络连接,linux虚拟机中和主机三种网络连接方式的区别

    linux虚拟机中和主机三种网络连接方式的区别 在介绍网络模式之前,关于网络的几个简单命令的使用 ifup eth0 //启动网卡eth0 ifdown eth0 //关闭网卡eth0 /etc/ne ...

  4. VirtualBox虚拟机几种网络连接方式介绍

    为了学习和使用Linux,多数人选择了使用VirtualBox虚拟机的方式来安装Linux系统.VirtualBox提供了多种网络连接方式,不同的网络连接方式决定了虚拟机是否可以联网,以及是否可以和宿 ...

  5. android 7种网络连接方式--IT蓝豹

    2019独角兽企业重金招聘Python工程师标准>>> 本项目由作者 王永飞 精心为初学者准备的学习项目. android 几种网络连接方式,本项目适合初学者学习网络知识. 项目中用 ...

  6. windows10系统-10-VirtualBox中的四种网络连接方式

    参考快速理解VirtualBox的四种网络连接方式 电脑连接virtualbox虚拟机的方法 VirtualBox NAT 端口映射实现宿主机网络共享 1 VirtualBox四种网络连接 1.1 宿 ...

  7. VM虚拟机-三种网络连接方式(桥接、NAT、仅主机模式)

    目录 虚拟机网络连接 一.Bridged(桥接) 二.NAT(网络地址转换) 三.Host-Only(仅主机) 在vmware workstation中如何配置网络连接方式 一.桥接 二.NAT 三. ...

  8. virtualbox四种网络连接方式及其设置方法

    VirtualBox中有4种网络连接方式: ①NAT ②Bridged Adapter ③Internal ④Host-only Adapte 废话不多说,直接上图! (注:此图直接取至Finalbu ...

  9. 如何在vmware内抓包?(一文讲明白vmware的三种网络连接方式)

    我们有时做主机之间的渗透测试,需要看网络发包的详细内容,但虚拟机内部如何抓包呢? vmware的虚拟网络编辑器有三种模式: ╔ HostOnly(仅主机) ╠ Bridge(桥接) ╚ NAT(代理) ...

最新文章

  1. 动态规划和分治法的区别
  2. 苹果智能音箱HomePod确定开售时间,权威人士质疑:是否太晚?
  3. J2EE的13种核心技术
  4. jvm性能调优 - 01类加载机制Review
  5. 程序员写了段代码,自称完美! 网友: 我现在还在改你的Bug
  6. 【公开课预告】:白板与开源
  7. 获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例
  8. pg加密扩展的安装_为编译安装的PG安装扩展
  9. ie8支持jq的html,jquery 什么版本不能用 ie8
  10. 基于 HTML5 WebGL 的民航客机飞行监控系统
  11. BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
  12. html 设置表格打印宽度设置,html表格怎么设置宽度
  13. JAVA集成腾讯云即时通讯IM服务端
  14. 苹果服务器是不是在维修,苹果维修中心玩转这些才是真懂iPhone
  15. Python教你18个高效编程的方法
  16. 览器野史 UserAgent列传
  17. ECB(实体边界控制)模式
  18. 专插本 计算机基础与程序设计 2020届考生纯手敲 C语言与数据结构学习中遇到的所有问题都在这里了,建议直接三连
  19. [H265/HEVC] 波前并行处理WPP
  20. 实现一个地铁线路站点

热门文章

  1. 5个高清/4K视频素材网站,免费下载。
  2. arduino平衡小车教程
  3. 苹果安兔兔html5排行榜,安兔兔发布:2018年11月国内iOS设备好评率排行榜
  4. 游戏安全:增强游戏安全,把握未来——用游戏盾防护保护你的游戏
  5. 证明人脑细胞在体外也有感知,「盘中之脑」论文正式登Cell子刊
  6. php写入文本 记事本打开换行_php如何读写文件换行的源代码
  7. 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署
  8. sql排序,组内排序
  9. python爬取数据的原理_成为Python高手必须懂的爬虫原理
  10. 成语答题小程序运营系列二