okhttp,retrofit,android-async-http,volley应该选择哪一个?
2016-07-13 10:18
288 查看
作者:Stay Zhang
链接:http://www.zhihu.com/question/35189851/answer/93973482
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我们来先说一个常识性的错误:
volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。
而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
所以不要混淆。
-----以下纯个人主观见解
首先,我想即使你单纯使用OkHttp,还是会再包一层的,这样就等价于Volley之流的框架,只是封装的好与坏而已。
android-async-http内部实现是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
Volley是官方出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,相当于模版模式吧,这样解耦还是非常方便的,可以随意切换,如果你之前使用过Volley,并习惯使用,那直接写个OkHttp扩展就行了。
Retrofit因为也是square出的,所以大家可能对它更崇拜些。Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。
炒鸡解耦,里面涉及到超多设计模式,个人觉得是很经典的学习案例。虽然支持Java8, Guava你可能也不需要用到。xml,protobuff等数据格式你也可能不需要解析。but,万一遇到鬼了呢。
至于性能上,个人觉得这完全取决于请求client,也就是okhttp的性能,跟这些封装工具没太大关系。
至于RxJava,最好充分理解其原理之后再使用,别人云亦云,特别team人数多的情况下,总得有个完全精通的吧,万一掉坑里了呢。。。
就说这么多啦,选最适合项目的,选大多数人选择的,选简单易用的,就这么个标准。
另外怎么选择开源library,可以参考我的简书
这么多开源框架,该用哪个好?
------------
额,为了更清晰的描述retrofit,Stay大致的分析了retrofit源码。
流程图如下:
链接:http://www.zhihu.com/question/35189851/answer/93973482
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我们来先说一个常识性的错误:
volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。
而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
所以不要混淆。
-----以下纯个人主观见解
首先,我想即使你单纯使用OkHttp,还是会再包一层的,这样就等价于Volley之流的框架,只是封装的好与坏而已。
android-async-http内部实现是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
Volley是官方出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,相当于模版模式吧,这样解耦还是非常方便的,可以随意切换,如果你之前使用过Volley,并习惯使用,那直接写个OkHttp扩展就行了。
Retrofit因为也是square出的,所以大家可能对它更崇拜些。Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。
炒鸡解耦,里面涉及到超多设计模式,个人觉得是很经典的学习案例。虽然支持Java8, Guava你可能也不需要用到。xml,protobuff等数据格式你也可能不需要解析。but,万一遇到鬼了呢。
至于性能上,个人觉得这完全取决于请求client,也就是okhttp的性能,跟这些封装工具没太大关系。
至于RxJava,最好充分理解其原理之后再使用,别人云亦云,特别team人数多的情况下,总得有个完全精通的吧,万一掉坑里了呢。。。
就说这么多啦,选最适合项目的,选大多数人选择的,选简单易用的,就这么个标准。
另外怎么选择开源library,可以参考我的简书
这么多开源框架,该用哪个好?
------------
额,为了更清晰的描述retrofit,Stay大致的分析了retrofit源码。
流程图如下:
相关文章推荐
- HttpClient使用详解
- 网络对接知识补充(客户端.:android,java 服务端:.net)
- Retrofit网络框架搭建
- java网络socket编程(一)之基础简介
- Android使用OKHttp包处理HTTP相关操作的基本用法讲解
- 第13章:网络编程
- 网络传输协议
- xmlns:app="http://schemas.android.com/apk/res-auto"找不到?
- 如何通过HTTPS方式访问webservice
- Linux下必须知道的网络命令(持续更新)
- Android OkHttp与物理存储介质缓存:DiskLruCache(2)
- Android OkHttp与物理存储介质缓存:DiskLruCache(2)
- 关于蓝牙设备之间共享网络的问题(android4.2)
- nginx反向代理https站点
- 网络流模板 Dinic+ISAP
- Http 状态码
- c 网络与套接字socket
- c 网络与套接字socket
- HTML5基础与Meta http-equiv属性
- 深入理解asp.net里的HttpModule机制