引言
目前来说单纯的网络框架请求库就锁定在了Volley、OkHttp、Retrofit三个,android-async-http的作者已经不维护,所以这里就不多说了,下面我们分别来说说这三个库的区别。
okhttp
okhttp是Square公司开源的针对Java和Android程序,封装的一个高性能http请求库,所以它的职责跟HttpUrlConnection是一样的,支持spdy、http2.0、websocket,支持同步、异步、,而且Okhttp又封装了线程池,封装了数据转,封装了参数使用,封装了数据转换,封装了参数使用、错误处理等,api使用起来更加方便。可以把它理解成是一个封装之后类似HttpUrlConnection的一个东西,但是你在使用的时候仍需自己再做一层封装,这样才能使用一个框架一样更加顺手。
http://square.github.io/okhttp/
**Volley**
Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlconnection,甚至支持OkHttp,具体的方法可以看Jake大神的这个Gist文件:
https://gist.github.com/JakeWharton/5616899
而且Volley里面也封装了ImageLoader,所以如果你愿意你甚至不需要使用图片加载框架,不过这个功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,对于稍微复杂点的需求还是需要用到专门的图片加载框架。
Volley也有缺陷,比如不支持post大数据,所以不适合上传文件。不过Volley设计的初衷本身也就是为频繁的、数据量小的网络请求而生!
关于Volley的具体用法可以见在GitHub的一个demo:
https://github.com/stormzhang/AndroidVolley
Retrofit
Retrofit是Square公司出品的默认基于OkHttp封装的一套RESTful网络请求框架,不了解RESTful概念的不妨去搜索学习下,RESTful可以说是目前流行的一套api设计的风格,并不是标准。
REtrofit的封装可以说是很强大,里面涉及到一堆的设计模式,你可以通过注解直接配置请求,你可以使用不同的http客户端,虽然默认是用http,可以使用不同Json Converter来序列化数据,同时提供对RxJava的支持,使用Retrofit+OkHttp+Rxjava+Dagger2可以说是目前比较潮的一套框架,但是需要比较高的门槛。
使用方法与地址
http://square.github.io/retrofit/
Volley VS OkHttp
毫无疑问Volley的优势在于封装的更好,而使用OkHttp你需要有足够的能力再进行一次封装。而OkHtttp的优势在于性能更高,因为OkHttp基于NIO和Okio,所以性能上要比Volley更快。
估计有些不理解IO和NIO的概率,这里姑且简单提下,这两个都是Java中的概念,如果我从硬盘读取数据,第一种方式是程序一直等,数据读完后才能继续操作,这中是最简单的也叫阻塞式IO,还有一种就是你读你的,我程序接着往下执行,等数据处理完你再来通知我,然后再处理回调。而第二种就是NIO的方式,非阻塞式。
所以NIO当然要比IO的性能要好了,而Okio是Square公司基于IO和NIO基础上做的一个更简单、高效处理数据流的一个库。
理论上如果Volley和Okhttp对比的话,我更倾向于使用Volley,因为Volley内部同样支持使用OkHttp,这点OkHttp的性能优势就没有了,而且Volley本身封装的也更易用,扩展性更好些。
Volley VS Retrofit
这两个库都做了非常不错的封装,但是Retrofit解耦的更彻底,尤其是Retrofit2.0出来,Jake对之前1.0设计不合理的地方做了大量重构,职责更细分,而且Retrofit默认使用Okhttp,性能上也要比Volley占优势,再有如果你的项目如果采用了RxJava,那更改使用Retrofit。
所以说这两个库相比,Retrofit毫无疑问更有优势,你在能掌握两个框架的前提下改优先使用Retrofit。但是个人认为Retrofit门槛要比Volley稍高些,你要理解他的原理,各种用法,想彻底搞明白还是需要花些功夫的,如果你对它一知半解,那还是建议在商业项目使用Volley吧。
总结;
优先使用Retrofit,前提是最好你们的后台api也能遵循RESTful的风格,其次如果你不想使用或者没能力掌握Retrofit,那么推荐使用Volley,毕竟Volley你不需要做过多的封装,当然如果你们需要上传大数据,那么不建议使用Volley,你该采用OkHttp。