volley-retrofit-okhttp之我们该如何选择网路框架

本文对比了Volley和Retrofit两大Android网络请求框架。Volley由Google发布,小巧美观,具备良好的内存缓存管理;Retrofit则由Square公司开发,简洁易用,支持硬盘缓存,能无缝结合RxJava。两者各有千秋,适用于不同场景。
摘要由CSDN通过智能技术生成

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来使用。

Android开发中有很多网络请求框架,但是比较过来比较过去,最后最倾向的就是这两个:

  • Volley:Google发布的网络请求框架,专门为移动设备定制,小而美。
  • Retrofit:良心企业 Square由大神JakeWharton主导的开源项目,是基于OkHttp封装的一套Resetful网络请求框架。Type-safe HTTP client for Android and Java by Square, Inc.

有关Volley的介绍请看之前发布的文章Volley源码分析

这里就不分别介绍他俩了,直接说各自的优缺点:

  • Retrofit使用起来更简单。而Volley配置起来会稍微麻烦,因为Volley可以使用HttpClientHttpUrlConnectionOkHttp我们需要根据自己的需求去配置。而Retrofit只能结合OkHttp使用。

  • Retrofit依赖于OkHttp,从而会导致它的包大小会比Volley的大。

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

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

  • Volley在网络请求部分默认依赖于Apache HttpClient。而Apache HttpClientAPI 23开始已经在Android中被移除并废弃了。这就是为什么很多开发者会认为Volley已经过时了,因为Volley并没有迁移到新的未废弃的代码。

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

  • 很多开发者都会说Retrofit会比Volley更快。因为有人专门去测试过,其实这里是不严谨的。因为Volley可以结合使用HttpUrlConnectionHttpClientOkHttp等来使用,而Retrofit是用OkHttp一起,所以如果你让Volley结合OkHttp之后再来测试你就会发现总体来说其实他们不相上下。

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

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

所以综合起来说使用Volley+OKHttp的组合是非常不错的,既可以保证速度又可以满足对缓存、重试等的处理。但是如果你是RxJava的使用者那你可能会更偏向于使用Retrofit,因为Retrofit可以无缝结合RxJava使用。目前主流的一套框架就是Retrofit + OkHttp + RxJava + Dagger2,但是对使用者的要求也相对要高些。


更多文章请移步Github AndroidNote

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值