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的小哦。