[转]volley-retrofit-okhttp之咱们该如何选择网路框架

提及VolleyRetrofitOkHttp相信基本没有人不知道。固然这里把OkHttp放进来可能有些不恰当。 
由于OkHttp的官方介绍是An HTTP+HTTP/2 client for Android and Java applications。 
也就是说OkHttp是基于http协议封装的一套请求客户端。它是真正的网络请求部分, 
HttpClientHttpUrlConnection是同样的, 
可是显然它的效率很是高(说到这里顺便提一嘴,从android 4.4开始HttpUrlConnection内部默认使用的也是OkHttp, 
具体请参考以前的文章HttpUrlConnection详解)。 
VolleyRetrofit是控制请求的队列、切换、解析、缓存等逻辑。因此VolleyRetrofit均可以结合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可使用HttpClientHttpUrlConnectionOkHttp咱们须要根据本身的需求去配置。而Retrofit只能结合OkHttp使用。缓存

  • Retrofit依赖于OkHttp,从而会致使它的包大小会比Volley的大。服务器

  • Volley有很好的内存缓存管理,它在解析以前会将整个相应部分都加载到内存中,因此它对于小的网络请求很是合适,可是不支持post大数据,因此不适合上传文件。而Retrofit使用的是硬盘缓存,因此相比起从缓存这块来说Retrofit可能会更慢一些。网络

  • Retrofit依赖于OkHttp,而OkHttp自身会避免同时两次请求同一个请求。因此Retrofit一样会和Volley同样去避免重复的请求,只不过它是在网络层来处理的。app

  • Volley在网络请求部分默认依赖于Apache HttpClient。而Apache HttpClientAPI 23开始已经在Android中被移除并废弃了。这就是为何不少开发者会认为Volley已通过时了,由于Volley并无迁移到新的未废弃的代码。框架

  • 默认状况下Volley会在DefaultRetryPolicy中会将读取和链接的超时时间设置为2.5s,而且对每次请求失败或者超时都有一次自动重试。 因此对于一些服务器响应可能会超过2s的请求,开发者须要格外的当心下。Retrofit的默认超时时间是10s,并且它对失败或者超时的操做不会自动重试。oop

  • 不少开发者都会说Retrofit会比Volley更快。由于有人专门去测试过,其实这里是不严谨的。由于Volley能够结合使用HttpUrlConnectionHttpClientOkHttp等来使用,而Retrofit是用OkHttp一块儿,因此若是你让Volley结合OkHttp以后再来测试你就会发现整体来讲其实他们不相上下。

  • Volley实现了很完善的Activity声明周期管理。

虽然Volley以前也有一些问题,可是它们也都被各个大神修复。

因此综合起来讲使用Volley+OKHttp的组合是很是不错的,既能够保证速度又能够知足对缓存、重试等的处理。可是若是你是RxJava的使用者那你可能会更偏向于使用Retrofit,由于Retrofit能够无缝结合RxJava使用。目前主流的一套框架就是Retrofit + OkHttp + RxJava + Dagger2,可是对使用者的要求也相对要高些。

相关文章
相关标签/搜索