Android中Okhttp,Volley,Retrofit网络框架优缺点及对比

Okhttp:

Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端。OkHttp 提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能。

优点:

  • 支持http请求,https请求、支持同步异步。
  • 支持文件下载、加载图片、基于Http的文件上传。
  • 使用的是HttpURLConnection,不要担心android版本的变换。(至少目前是都支持的)。
  • 利用响应缓存来避免重复的网络请求。
  • 支持 SPDY,允许连接同一主机的所有请求分享一个socket。
  • 如果SPDY不可用,会使用连接池减少请求延迟。
  • 使用GZIP压缩下载内容,且压缩操作对用户是透明的。

ps:SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。

缺点:

  • 比如callback回来是在线程里面, 不能刷新UI,需要我们手动处理。
  • 封装比较麻烦。

Volley:

是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的。

优点:

  • 非常适合进行数据量不大,但通信频繁的网络操作
  • 可以取消请求,容易扩展,面向接口编程
  • 网络请求线程NetworkDispatcher默认开启了4个,可以优化,通过手机CPU数量
  • 可直接在主线程调用服务端并处理返回结果

缺点:

  • 对大文件下载 Volley的表现非常糟糕。
  • 只支持http请求。
  • 在BasicNetwork中判断了statusCode(statusCode < 200 || statusCode >
    299),如何符合条件直接抛出IOException(),不够合理
  • 图片加载性能一般。
  • 使用的是httpclient,HttpURLConnection。不过在android
    6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar。

Retrofit:

是Square公司出品的默认基于OkHttp封装的一套RESTful网络请求框架,RESTful是目前流行的一套api设计的风格。
Retrofit + OkHttp + RxJava + Dagger2 可以说是目前比较潮的一套框架。

优点:

  • 可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等
  • 请求的方法参数注解都可以定制
  • 支持同步、异步和RxJava
  • 超级解耦、rest风格,更安全和高效
  • 可以配置不同的反序列化工具来解析数据,如json、xml等
  • 使用非常方便灵活
  • 框架使用了很多设计模式(感兴趣的可以看看源码学习学习)
    缺点:
  • 不能接触序列化实体和响应数据
  • 执行的机制太严格
  • 使用转换器比较低效
  • 只能支持简单自定义参数类型

Volley VS OkHttp

Volley的优势在于封装的更好,而使用OkHttp你需要有足够的能力再进行一次封装。而OkHttp的优势在于性能更高,因为 OkHttp基于NIO和Okio ,所以性能上要比 Volley更快。IO 和 NIO这两个都是Java中的概念,如果我从硬盘读取数据,第一种方式就是程序一直等,数据读完后才能继续操作这种是最简单的也叫阻塞式IO,还有一种是你读你的,程序接着往下执行,等数据处理完你再来通知我,然后再处理回调。而第二种就是 NIO 的方式,非阻塞式, 所以NIO当然要比IO的性能要好了,而 Okio是 Square 公司基于IO和NIO基础上做的一个更简单、高效处理数据流的一个库。理论上如果Volley和OkHttp对比的话,更倾向于使用 Volley,因为Volley内部同样支持使用OkHttp,这点OkHttp的性能优势就没了, 而且 Volley 本身封装的也更易用,扩展性更好些。

OkHttp VS Retrofit

毫无疑问,Retrofit 默认是基于 OkHttp 而做的封装,这点来说没有可比性,肯定首选 Retrofit

Volley VS Retrofit

这两个库都做了不错的封装,但Retrofit解耦的更彻底,尤其Retrofit2.0出来,Jake对之前1.0设计不合理的地方做了大量重构, 职责更细分,而且Retrofit默认使用OkHttp,性能上也要比Volley占优势,再有如果你的项目如果采用了RxJava ,那更该使用 Retrofit 。所以这两个库相比,Retrofit更有优势,在能掌握两个框架的前提下该优先使用 Retrofit。但是Retrofit门槛要比Volley稍高些, 要理解他的原理,各种用法,想彻底搞明白还是需要花些功夫的,如果你对它一知半解,那还是建议在商业项目使用Volley吧。

总结

综上,如果以上三种网络库你都能熟练掌握,那么优先推荐使用Retrofit,前提是最好你们的后台api也能遵循RESTful的风格, 其次如果不想使用或者没能力掌握Retrofit ,那么推荐使用Volley ,毕竟Volley不需要做过多的封装,如果需要上传大数据, 那么不建议使用 Volley,该采用 OkHttp 。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值