声明:私用,技术交流使用,大部分摘抄
HttpURLConnection:
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。
HttpClient:
在Android中,androidSDK中集成了Apache的HttpClient模块,HttpClient就是一个增强版的HttpURLConnection,它只是关注于如何发送请求、接收响应,以及管理HTTP连接。如果做好封装或者使用android-async-http,Afinal,Xutils也能挺简单的完成http请求,但是Android6.0谷歌因为和Apache更新难以同步等原因吧已经放弃了HttpClient,HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
AsyncHttpClient:
android-async-http内部实现是基于HttpClient, 我想可能也是因为目前 HttpClient 已经被废弃所以作者放弃维护了。
Volley:
是谷歌官方13年I/O大会推出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,我理解的就是说它是在应用层,做了封装,使用起来比较方便,直接用,还可以扩展HttpUrlConnection, HttpClient, OkHttp。相当于模版模式。这样解耦还是非常方便的,可以随意切换。
而且 Volley 里面也封装了 ImageLoader ,所以如果图片处理需求简单我们可以不需要专门再去使用图片加载框架。
而且Volley 也有缺陷,比如不支持 post 大数据,所以不适合上传文件。不过 Volley 设计的初衷本身也就是为频繁的、数据量小的网络请求而生!
okHttp:
OkHttp 是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库。
我们来先说一个常识性的错误:volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
OKHttp 类似于 HttpUrlConnection, 是基于传输层实现应用层协议的网络框架。 而不止是一个 Http 请求应用的库。
- ok的优势:
链接复用
Response 缓存和 Cookie
默认 GZIP
请求失败自动重连
DNS 扩展
Http2/SPDY/WebSocket 协议支持
默认情况下,OKHttp会自动处理常见的网络问题:像二次连接、SSL的握手问题。
从Android4.4开始HttpURLConnection的底层实现采用的是okHttp.
需要注意的是:okHttp的回调方法,并不处于UI 线程中,对网络请求结果如果涉及UI 线程的操作,需要使用Handler。可以把它理解成是一个封装之后的类似 HttpUrlConnection 的一个东西,但是你在使用的时候仍然需要自己再做一层封装,这样才能像使用一个框架一样更加顺手。
Retrofit:
Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架,,RESTful 可以说是目前流行的一套 api 设计的风格,并不是标准。Retrofit 的封装可以说是很强大,里面涉及到一堆的设计模式,你可以通过注解直接配置请求,你可以使用不同的 http 客户端,虽然默认是用 OKhttp ,可以使用不同 Json Converter 来序列化数据,同时提供对 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 可以说是目前比较潮的一套框架,但是需要有比较高的门槛。
OK VS Volley
毫无疑问 Volley 的优势在于封装的更好,而使用 OkHttp 你需要有足够的能力再进行一次封装。而 OkHttp 的优势在于性能更高,因为 OkHttp 基于 NIO 和 Okio ,所以性能上要比 Volley更快。
IO和NIO区别,NIO 要比 IO 的性能要好,阻塞方面(IO阻塞),NIO面向缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。而 Okio 是 Square 公司基于 IO 和 NIO 基础上做的一个更简单、高效处理数据流的一个库。
OkHttp VS Retrofit :
毫无疑问,Retrofit 默认是基于 OkHttp 而做的封装,这点来说没有可比性,肯定首选 Retrofit。retrofit,结合okhttp以及gson,再加上Rxjava,简直神器!但是实际到后台数据风格(RESTful)我觉得,这是我们下一次改进的方向。
Volley VS Retrofit:
这两个库都做了非常不错的封装,但是 Retrofit 解耦的更彻底,尤其 Retrofit 2.0 出来,Jake 对之前 1.0 设计不合理的地方做了大量重构,职责更细分,而且 Retrofit 默认使用 OkHttp ,性能上也要比 Volley 占优势,再有如果你的项目如果采用了 RxJava ,那更该使用 Retrofit 。
所以总结下来:
Retrofit > Volley+OK > OK ,
Retrofit > 封装OK > Volley。