okhttp,retrofit,volley,HttpClient,HttpUrlConnection之间的关系

Android网络开发不可避免的会接触到标题中的一些名词,本文整理下几个之间的关系。

对软件来说有个万能定律定律就是有什么“解决不了的问题就加个中间层,如果还是解决不了就多加几层”

基于unix的计算机操作系统可以分为内核层和用户层


1.内核层的驱动框架和系统调用。按网络层次来说,物理设备网卡,线路等对应最底层,tcp和ip由内核实现。对上的系统调用就围绕socket展开(诸如绑定,监听等)。当然socket和系统驱动被融合在vfs中。


2.再往上的用户层首先要封装系统调用,如libc库。


3.继续往上就是java虚拟机的核心库libcore。这个层次上就是HttpClient,HttpUrlConnection和okhttp中的的一部分。HttpClient是Apache接口(org.appache.http),Android6.0之前使用该接口的,后续就使用HttpUrlConnection,这个是java的标准接口,在java.net包下。个人推测是出于版权原因考虑,并不是效率原因。okhttp是square开源的项目,也是http协议实现和使用的封装。但是okHttp还封装了线程池等其他东西,所以说okhttp的一部分是和HttpClient,HttpUrlConnection等同的。这三个其实最终的数据传递都会归结到socket的使用上。

okHttp基于square的另一个开源项目Okio,使用了java的nio,非阻塞式io,原理上比阻塞式io要效率高。


4.继续往上就是更高层次的封装,例如线程池,数据转换,参数使用、错误处理等。包括okhttp的部分,retrofit,volley。

okHttp是square的开源项目,可以看出它的特殊之处是跨越了两个层次。当然因为出的早设计不周,所已后续又出现了Volley和Retrofit,但是底层是可以被复用的。

Volley 是 Google 官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持 HttpClient、HttpUrlConnection,甚至支持 okHttp。
Retrofit 是 Square 公司出品的默认基于 okHttp 封装的一套 RESTful 网络请求框架, 下层操作是基于okhttp的。Retrofit应该是目前最nb的架构了,解耦的很彻底。

目前最主流的就是Retrofit,它源码中是绑死okhttp的(一家公司的产品嘛)。

当然对网络要求不高的app用Volley或者直接用java标准接口也可以,app大小肯定会比用Retrofit的小哦。









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值