来自iOS开发人员学习Android的两部分问题,研究Android项目,该项目将发出从JSON到图像到音频和视频的流媒体下载的各种请求:
我希望有人可以提供一些最佳使用案例的具体例子。
如果要与Web服务通信,请使用Retrofit。如果要下载图像,请使用对等库Picasso。如果您需要在Retrofit / Picasso之外进行HTTP操作,请使用OkHTTP。
Volley与Retrofit + Picasso大致竞争。从好的方面来说,它是一个图书馆。在负面,它是 一个没有证件, 一个不受支持的,“将代码扔到墙上并对其进行I | O演示”库。
编辑 - 排球现在由谷歌正式支持。请参考Google Developer Guide
从我所看到的,看起来OkHTTP是3中最强大的
如果可用,Retrofit会自动使用OkHTTP。有一个Gist from Jake Wharton连接Volley和OkHTTP。
并且可以处理该项目的要求(如上所述)。
通过传统的“流媒体”定义,你可能不会将它们用于“音频和视频的流媒体下载”。相反,Android的媒体框架将为您处理这些HTTP请求。
话虽这么说,如果你打算尝试自己的基于HTTP的流媒体,OkHTTP应该处理这种情况;我不记得Volley如何处理这种情况。 Retrofit和Picasso都不是为此设计的。
而另一种选择:https://github.com/apptik/jus
还有许多其他方便的功能,如标记,变压器等。
从这里看Volley的观点可以满足您的要求:
一方面,Volley完全专注于处理个人的小型HTTP请求。因此,如果您的HTTP请求处理有一些怪癖,Volley可能会为您提供一个钩子。另一方面,如果你的图像处理有一个怪癖,你唯一真正的钩子是ImageCache。 “这不是什么,但也不是很多!”。但它还有更多其他优点,例如一旦定义了请求,在片段或活动中使用它们就像并行AsyncTasks一样无痛
排球的利弊:
那么Volley有什么好看的?
排球问题: 由于Volley是新的,很少有东西不支持,但它是固定的。
你也可以阅读这个Comparing Volley's image loading with Picasso
改造:
它由Square发布,它提供了非常易于使用的REST API(更新:Voila!支持NIO)
改造的优点:
更新: - Retrofit 2.0.0-beta2有很多非常好的变化
版本1.6的改造的缺点:
(以上所有缺点已在新版本的Retrofit 2.0 beta中得到解决)
========================================================================
更新:
Android Async vs Volley vs Retrofit性能基准测试(毫秒,更低值更好):
(由于新版本的OKhttp依赖于NIO Okio库,因此可以通过Java NIO支持改进上面的Retrofit Benchmarks信息)
在所有三次不同重复测试(1 - 25次)的测试中,Volley的速度提高了50%到75%。改进速度比AsyncTasks快50%至90%,同样的端点击中相同的次数。在Dashboard测试套件中,这转化为加载/解析数据的速度提高了几秒钟。这是一个巨大的现实世界的差异。为了使测试公平,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支持,连接池,磁盘缓存,透明压缩!最近,它得到了一些支持java NIO和Okio库的支持。
来源,信用:Josh Ruesch先生的volley-vs-retrofit
注意:关于流式传输取决于您想要的流式传输类型,如RTSP / RTCP。
RoboSpice与齐射
来自https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ
AFNetworking for Android:
快速Android网络库支持所有类型的HTTP / HTTPS请求,如GET,POST,DELETE,HEAD,PUT,PATCH
快速Android网络库支持下载任何类型的文件
快速Android网络库支持上传任何类型的文件(支持分段上传)
快速Android网络库支持取消请求
快速Android网络库支持为任何请求设置优先级(LOW,MEDIUM,HIGH,IMMEDIATE)
快速Android网络库支持RxJava
由于它使用OkHttp作为网络层,它支持:
快速Android网络库支持HTTP / 2支持,允许同一主机的所有请求共享套接字
快速Android网络库使用连接池,可减少请求延迟(如果HTTP / 2不可用)
透明GZIP缩小了下载大小
快速的Android网络库支持响应缓存,可以完全避免网络重复请求
谢谢:图书馆是我创建的
异步HTTP客户端loopj与Volley
我的项目的细节是小的HTTP REST请求,每1-5分钟。
我很长时间使用异步HTTP客户端(1.4.1)。性能优于使用vanilla Apache httpClient或HTTP URL连接。无论如何,新版本的库对我来说不起作用:库异常切换链回调。
阅读所有答案促使我尝试新的东西。我选择了Volley HTTP库。
使用它一段时间后,即使没有经过测试,我也清楚地看到响应时间降至1.5x,2x Volley。
也许Retrofit比异步HTTP客户端更好?我需要尝试一下。但我确信Volley不适合我。
只是从我与Volley一起工作的经验中加入一些讨论:
OutputStream
将请求体写入底层套接字,也不能使用InputStream
来读取响应体,就像基本的HttpURLConnection
那样。因此,Volley是上传或下载大文件的不良选择。您的请求和响应应该很小。这是我个人遇到的排球的最大限制之一。对于它的价值,OkHttp确实有用于处理流的接口。这并不是说Volley没有一些有用的功能。当然可以。易于定制的重试策略,透明缓存,取消API以及对请求调度和并发连接的支持是很棒的功能。只要知道它不适用于所有HTTP用例(参见上面的第1项),并且在您的应用程序中将Volley投入生产使用会引起一些麻烦(第2项)。
我最近发现了一个名为ion的库,它为表增加了一些额外的功能。
ion内置支持与ImageView,JSON(在GSON的帮助下)集成的图像下载,文件和非常方便的UI线程支持。
我在一个新项目上使用它,到目前为止结果都很好。它的使用比Volley或Retrofit简单得多。
添加到已接受的答案以及LOG_TAG所说的......为了让Volley在后台线程中解析您的数据,您必须继承Request<YourClassName>
,因为在主线程上调用onResponse
方法并且在主线程上进行解析可能会导致UI滞后你的回答很大。阅读here如何做到这一点。
我在我的应用程序中使用这两个。
每当我解析嵌套的JSON类时,Robospice的工作速度都比Retrofit快。因为Spice Manger会为你做一切。在Retrofit中,您需要创建GsonConverter并对其进行反序列化。
我在同一个活动中创建了两个片段,并使用两种相同类型的URL同时调用。
09-23 20:12:32.830 16002-16002/com.urbanpro.seeker E/RETROFIT﹕ RestAdapter Init
09-23 20:12:32.833 16002-16002/com.urbanpro.seeker E/RETROFIT﹕ calling the method
09-23 20:12:32.837 16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ initialzig spice manager
09-23 20:12:32.860 16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ Executing the method
09-23 20:12:33.537 16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ on SUcceess
09-23 20:12:33.553 16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ gettting the all contents
09-23 20:12:33.601 16002-21819/com.urbanpro.seeker E/RETROFIT﹕ deseriazation starts
09-23 20:12:33.603 16002-21819/com.urbanpro.seeker E/RETROFIT﹕ deseriazation ends