Android Web服务和网络库的比较:OKHTTP、改型和截取

Android Web服务和网络库的比较:OKHTTP、改型和截取,android,networking,retrofit,android-networking,android-webservice,Android,Networking,Retrofit,Android Networking,Android Webservice,一位学习Android的iOS开发者提出了两个部分的问题,他正在从事一个Android项目,该项目将提出从JSON到图像再到音频和视频流下载的各种请求: 在iOS上,我广泛使用了该项目。Android是否有一个等效的库 我已经读了很多关于Square的书,但还没有和他们一起发展的经验。我希望有人能提供一些具体的最佳用例的例子。从我所读到的内容来看,OkHTTP似乎是三者中最健壮的,并且可以处理这个项目的需求(如上所述) 我希望有人能为每个人提供一些最佳用例的具体例子 如果您正在与Web服务通信,

一位学习Android的iOS开发者提出了两个部分的问题,他正在从事一个Android项目,该项目将提出从JSON到图像再到音频和视频流下载的各种请求:

  • 在iOS上,我广泛使用了该项目。Android是否有一个等效的库

  • 我已经读了很多关于Square的书,但还没有和他们一起发展的经验。我希望有人能提供一些具体的最佳用例的例子。从我所读到的内容来看,OkHTTP似乎是三者中最健壮的,并且可以处理这个项目的需求(如上所述)

  • 我希望有人能为每个人提供一些最佳用例的具体例子

    如果您正在与Web服务通信,请使用改装。如果下载图像,请使用毕加索对等库。如果需要执行翻新/毕加索以外的HTTP操作,请使用OkHTTP

    截击与改装+毕加索大致竞争。好的一面是,它是一个图书馆。另一方面,它是一个未记录的、不受支持的“将代码扔到墙上并在上面做I | O演示”库

    编辑截击现在由谷歌正式支持。请参考

    据我所知,OkHTTP似乎是这三种协议中最健壮的一种

    如果可用,改型将自动使用OkHTTP。有一个连接截击和OkHTTP的接口

    并能满足本项目(如上所述)的要求

    按照传统的“流媒体”定义,您可能不会将它们用于“音频和视频的流媒体下载”。相反,Android的媒体框架将为您处理这些HTTP请求


    也就是说,如果您要尝试自己进行基于HTTP的流式传输,OkHTTP应该处理该场景;我不记得凌空抽射能很好地处理这种情况。改装和毕加索都不是为此而设计的。

    从截击角度来看,以下是满足您需求的一些优势:

    一方面,Volley完全专注于处理单个的小型HTTP请求。所以,如果您的HTTP请求处理有一些怪癖,那么Volley可能会为您提供一个钩子。另一方面,如果您在图像处理方面有一个怪癖,那么唯一真正的钩子就是ImageCache。“这不是什么,但也不是很多!”。但它还有其他更多的优点,比如一旦定义了请求,就可以在片段或活动中使用它们,这与并行异步任务不同

    截击的利弊:

    那么截击有什么好处呢

    • 网络部分不仅仅是图像。凌空抽射的目的是 后端不可分割的一部分。对于基于 简单的休息服务,这可能是一个巨大的胜利

    • NetworkImageView在请求清理方面比 毕加索,在GC使用模式上更为保守。 NetworkImageView完全依赖强内存引用,并且 在对请求进行新请求时,立即清除所有请求数据 ImageView,或一旦该ImageView移离屏幕

    • 表演。这篇文章不会对这一说法进行评估,但他们明确表示 在内存使用模式方面采取了一些谨慎措施。 Volley还努力批量回调主线程以 减少上下文切换

    • 截击显然也有前途。如果你是 感兴趣

    • 如果你处理的是高分辨率的压缩图像,凌空就是 这里唯一有效的解决方案

    • Volley可以与Okhttp一起使用(新版本的Okhttp支持NIO以获得更好的性能)

    • 截击在活动生命周期中起到了很好的作用

    截击问题:
    由于截击是新的,很少有东西不被支持,但它是固定的

  • 多部分请求(解决方案:)

  • 状态代码201被视为错误,从200到207的状态代码现在是成功响应。(已修复:)

    更新:在谷歌截击的最新版本中,2XX状态码错误现在是!感谢菲卡斯·柯克帕特里克

  • 它的文档较少,但许多人都支持github中的volley,可以找到类似java的文档。 在android开发者网站上,您可以找到的指南。截取源代码可以在

  • 解决/更改框架使用(上述公共软件)

  • 你也可以读这个

    改装:

    它是由发布的,它提供了非常易于使用的RESTAPI(更新:瞧!支持NIO)

    改装的优点:

    • 与Volley相比,改型的RESTAPI代码很简单,提供了 优秀的API文档和社区支持! 这很容易添加到项目中

    • 我们可以将它与任何序列化库一起使用,并进行错误处理

    更新: -改装2.0.0-beta2有很多非常好的变化

    • OkHttp 2.0的1.6版改型现在依赖于来支持java.io和java.nio,这使得使用ByteString和Buffer访问、存储和处理数据变得更加容易,从而节省CPU和内存。(仅供参考:这让我想起了支持NIO的库!) 我们可以使用rxObservables来组合和链接REST调用,以避免丑陋的回调链(避免回调地狱!!)
    1.6版改型的缺点:

    • 内存相关的错误处理功能不好(在旧版本的改型/OkHttp中),不确定Okio with JavaNIO支持是否对其进行了改进

    • 如果我们使用这个,最小的线程协助可能会导致回调 以不恰当的方式。
      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