Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp、Volley

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

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/SPDYSPDY(发音如英语: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

   

3OkHttp:是一个相对成熟的解决方案,我们更有理由相信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地址



现在建议使用 okhttp

参考博客http://blog.csdn.net/zhangcanyan/article/details/51793951


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值