提及Volley
、Retrofit
、OkHttp
相信基本没有人不知道。固然这里把OkHttp
放进来可能有些不恰当。
由于OkHttp
的官方介绍是An HTTP+HTTP/2 client for Android and Java applications
。
也就是说OkHttp
是基于http
协议封装的一套请求客户端。它是真正的网络请求部分,
与HttpClient
、HttpUrlConnection
是同样的,
可是显然它的效率很是高(说到这里顺便提一嘴,从android 4.4
开始HttpUrlConnection
内部默认使用的也是OkHttp
,
具体请参考以前的文章HttpUrlConnection详解)。
而Volley
、Retrofit
是控制请求的队列、切换、解析、缓存等逻辑。因此Volley
和Retrofit
均可以结合OkHttp
来使用。java
在Android
开发中有不少网络请求框架,可是比较过来比较过去,最后最倾向的就是这两个:android
Volley
:Google
发布的网络请求框架,专门为移动设备定制,小而美。Retrofit
:良心企业 Square
由大神JakeWharton
主导的开源项目,是基于OkHttp
封装的一套Resetful
网络请求框架。Type-safe HTTP client for Android and Java by Square, Inc.
有关Volley
的介绍请看以前发布的文章Volley源码分析git
这里就不分别介绍他俩了,直接说各自的优缺点:github
Retrofit
使用起来更简单。而Volley
配置起来会稍微麻烦,由于Volley
可使用HttpClient
、HttpUrlConnection
、OkHttp
咱们须要根据本身的需求去配置。而Retrofit
只能结合OkHttp
使用。缓存
Retrofit
依赖于OkHttp
,从而会致使它的包大小会比Volley
的大。服务器
Volley
有很好的内存缓存管理,它在解析以前会将整个相应部分都加载到内存中,因此它对于小的网络请求很是合适,可是不支持post
大数据,因此不适合上传文件。而Retrofit
使用的是硬盘缓存,因此相比起从缓存这块来说Retrofit
可能会更慢一些。网络
Retrofit
依赖于OkHttp
,而OkHttp
自身会避免同时两次请求同一个请求。因此Retrofit
一样会和Volley
同样去避免重复的请求,只不过它是在网络层来处理的。app
Volley
在网络请求部分默认依赖于Apache HttpClient
。而Apache HttpClient
从API 23
开始已经在Android
中被移除并废弃了。这就是为何不少开发者会认为Volley
已通过时了,由于Volley
并无迁移到新的未废弃的代码。框架
默认状况下Volley
会在DefaultRetryPolicy
中会将读取和链接的超时时间设置为2.5s
,而且对每次请求失败或者超时都有一次自动重试。 因此对于一些服务器响应可能会超过2s
的请求,开发者须要格外的当心下。Retrofit
的默认超时时间是10s
,并且它对失败或者超时的操做不会自动重试。oop
不少开发者都会说Retrofit
会比Volley
更快。由于有人专门去测试过,其实这里是不严谨的。由于Volley
能够结合使用HttpUrlConnection
、HttpClient
、OkHttp
等来使用,而Retrofit
是用OkHttp
一块儿,因此若是你让Volley
结合OkHttp
以后再来测试你就会发现整体来讲其实他们不相上下。
Volley
实现了很完善的Activity
声明周期管理。
虽然Volley
以前也有一些问题,可是它们也都被各个大神修复。
因此综合起来讲使用Volley+OKHttp
的组合是很是不错的,既能够保证速度又能够知足对缓存、重试等的处理。可是若是你是RxJava
的使用者那你可能会更偏向于使用Retrofit
,由于Retrofit
能够无缝结合RxJava
使用。目前主流的一套框架就是Retrofit + OkHttp + RxJava + Dagger2
,可是对使用者的要求也相对要高些。