Android网络库的比较:OkHTTP,Retrofit和Volley
来自iOS开发人员学习Android的两部分问题,涉及Android项目,该项目将提出从JSON到图像到流式下载音频和视频的各种请求:
在iOS上,我广泛使用了AFNetworking项目。 有没有一个等效的Android库?
我已经阅读了Square上的OkHTTP和Retrofit以及Volley,但还没有与他们一起开发经验。 我希望有人能提供一些最佳用例的具体例子。 从我读过的内容看,似乎OkHTTP是三者中最强大的,并且可以处理这个项目的需求(如上所述)。
我希望有人能提供一些最佳用例的具体例子。
如果您正在与Web服务通信,请使用Retrofit。 如果您正在下载图像,请使用对等库Picasso。 如果您需要执行位于Retrofit / Picasso之外的HTTP操作,请使用OkHTTP。
Volley大致与Retrofit + Picasso竞争。 另一方面,它是一个图书馆。 在负面方面,它是一个没有记录的,不受支持的,“将代码放在墙上并对其执行I | O演示”库。
编辑 - Volley现在正式得到Google的支持。 请参阅Google开发人员指南
从我读过的内容来看,好像OkHTTP是3中最强大的
如果可用,Retrofit会自动使用OkHTTP。 Jake Wharton有一个将Volley和OkHTTP连接起来的Gist。
并可以处理该项目的要求(如上所述)。
按照传统的“流媒体”的定义,你可能不会使用它们来“流式下载音频和视频”。 相反,Android的媒体框架将为您处理这些HTTP请求。
话虽如此,如果您打算尝试自己的基于HTTP的流媒体,OkHTTP应该处理这种情况; 我不记得Volley会如何处理这种情况。 Retrofit和Picasso都不是为此设计的。
在这里查看Volley透视图是您的需求的一些优势:
Volley一方面完全专注于处理单个的小型HTTP请求。 所以如果你的HTTP请求处理有一些怪癖,那么Volley可能有你的一个钩子。 另一方面,如果你在图像处理方面有一些怪癖,那么你唯一真正的钩子就是ImageCache 。 “这不是什么,但也不是很多!”。 但它具有更多其他优点,例如一旦定义请求,从片段或活动中使用它们是无痛的,不像并行AsyncTasks
Volley的优缺点:
那么Volley有什么好处?
网络部分不仅仅是图像。 Volley打算成为您后端的一个组成部分。 对于基于简单REST服务的新项目,这可能是一个巨大的胜利。
NetworkImageView在请求清理方面比毕加索更具侵略性,GC使用模式更保守。 NetworkImageView完全依赖于强大的内存引用,只要ImageView发出新的请求,或者一旦ImageView移出屏幕,就立即清除所有请求数据。
性能。 这篇文章不会评估这个说法,但是他们已经明确地在内存使用模式中谨慎一些。 Volley还努力为主线程批量回调以减少上下文切换。
排球显然也有未来。 如果您有兴趣,请查看RequestFuture。
如果您要处理高分辨率的压缩图像,那么Volley是唯一可行的解决方案。
Volley可以与Okhttp一起使用(Okhttp的新版本支持NIO以获得更好的性能)
排球在活动生命周期中表现出色。
排球问题:
由于Volley是新的,很少有东西不被支持,但它是固定的。
多部分请求(解决方案:https://github.com/vinaysshenoy/enhanced-volley)
状态代码201被视为错误,现在从200到207的状态代码成功响应(修正:https://github.com/Vinayrraj/CustomVolley)
更新:在Google volley的最新版本中,2XX状态代码错误现在已修复 !感谢Ficus Kirkpatrick!
它没有文档记载,但许多人都支持在github中抽象化,java可以在这里找到文档。 在android开发人员网站上,您可能会找到使用Volley传输网络数据的指南。 在Google Git上可以找到大量的源代码
要解决/更改Volley Framework的重定向策略,请使用Volley和OkHTTP(CommonsWare上面提到的)
你也可以阅读比较Volley的图像加载与毕加索
改造:
它由Square发布,它提供了非常易于使用的REST API(更新:支持NIO的Voila!)
改进的优点:
与Volley相比,Retrofit的REST API代码非常简短,并且提供了出色的API文档,并且在社区中拥有良好的支持! 添加到项目中非常容易。
我们可以将它与任何序列化库一起使用,并进行错误处理。
更新: - Retrofit 2.0.0-beta2中有很多非常好的变化
版本1.6的改进缺点:
与内存相关的错误处理功能并不好(在旧版本的Retrofit / OkHttp中)并不确定是否使用具有Java NIO支持的Okio进行了改进。
如果我们以不正确的方式使用它,最小线程协助可能导致回调地狱。
(所有上述缺点已在新版本的Retrofit 2.0 beta中解决)
================================================== ======================
更新:
Android Async vs Volley vs Retrofit性能基准测试(毫秒,更低的值更好):
(FYI高于Retrofit基准测试信息会随着java NIO的支持而提高,因为OKhttp的新版本依赖于NIO Okio库)
在三次不同重复次数(1 - 25次)的测试中,Volley的速度都在50%到75%之间。 以比AsyncTasks快50%至90%的速度提供改进,以相同的次数达到相同的端点。 在仪表板测试套件中,这转换为加载/解析数据几秒钟。 这是一个巨大的现实世界的差异。 为了使测试更公平,AsyncTasks / Volley的时间包括JSON解析,因为Retrofit会自动为您做。
RetroFit赢得基准测试!
最后,我们决定使用Retrofit进行应用。 它不仅速度快得可怕,而且与我们现有的架构非常吻合。 我们能够创建一个父回调接口,它可以自动执行错误处理,缓存和分页,而我们的API几乎不费力气。 为了在Retrofit中进行合并,我们必须重命名变量以使我们的模型符合GSON,编写几个简单的接口,从旧API中删除函数,并修改我们的片段以不使用AsyncTasks。 现在我们已经完成了几个片段的转换,这非常简单。 我们不得不克服一些成长中的痛苦和问题,但总的来说,进展顺利。 一开始,我们遇到了一些技术问题/错误,但Square有一个非常棒的Google+社区,可以帮助我们完成这项工作。
何时使用Volley?
当我们需要加载图像以及使用REST API时,我们可以使用Volley!,同时需要多个n / w请求的网络调用排队系统! 也Volley有更好的内存相关的错误处理比Retrofit!
OkHttp可以和Volley一起使用,Retrofit默认使用OkHttp ! 它具有SPDY支持,连接池,磁盘缓存,透明压缩! 最近,它已经得到了Okio库的支持。
来源,信用:Josh Ruesch先生的抽气与改造
注意:关于流式传输取决于您想要的流类型,如RTSP / RTCP。
RoboSpice VS. 齐射
从https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ
上一篇: Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley
下一篇: android.os.NetworkOnMainThreadException with android 4.2