Android网络框架的选择

今年已经收是2018年了,Android P 预览版已经推出来了。这里只是想说明一下技术的更新太快了。
下面说正题,目前我们在Android中可选择的网络框架主要有以下几种:

  1. Volley
  2. OKhttp
  3. Retrofit

这三种,但是要说明一下:
首先,Retrofit是基于OkHttp封装的一套 RESTful网络请求框架,底层默认采用的OKhttp,所以网络请求框架就剩下两个了,下面就来说说这两个。

1.Volley
Volley 是 Google 官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持 HttpClient、HttpUrlConnection,甚至支持 OkHttp。在Android6.0以上的机型中不再支持HttpClient。
Volley 在Android2.3以下机型使用的是HttpClient,在Android2.3及以上默认使用HttpUrlConnection。也就是说Volley 是在HttpUrlConnection的基础上进行的封装,这点与OKhttp不同,一会会说到。

问题1:它有什么优势?
答:基于网络队列,适合小数据频繁通信。Volley的网络请求线程池默认大小为4。意味着可以并发进行4个请求,大于4个,会排在队列中。

问题2:为什么Volley只适合数据量小,并发高的请求?为什么volley不适合post大量数据,以及为什么不适合上传下载大量文件?
答:Volley在内部实现上采用了ByteArrayPool进行内存中的数据存储,ByteArrayPool只是一个小于4k的内村缓存池,当存储的时候优是从ByteArrayPool中取出一块已经分配的内存区域, 不必每次存数据都要进行内存分配,而是先查找缓冲池中有无适合的内存区域,如果有,直接拿来用,从而减少内存分配的次数 。但是这块内存的大小有限制,所以当进行上传或者下载大量数据的时候这块内存容易溢出,造成OOM。

问题3:那它怎么操作大文件?
答:通过配置,它是可以完成大文件操作的,方法请自行百度。

参考:
手撕 Volley (一)
为什么说Volley适合数据量小,通信频繁的网络操作

  1. OKhttp
    这个框架比较火,估计做Android开发的都知道,OKhttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和Volley一样实现了http协议的缓存。
    它与Volley的区别之一是Volley底层使用HttpUrlConnection,而OKhttp则重新实现了http协议,并又有底层依赖。
    它的优势一大堆,目前Android源码底层已经用OKhttp代替了HttpUrlConnection可见OKhttp还是十分强大的,基本教程网上已经很多了,我就不再写了,说说我的选择吧。
    如果软件自身请求比较多,并且不涉及到大文件,优先选用Volley,毕竟它效率还不错,开发相对简单,代码本身体积也比较小。当软件网络请求比较复杂,数据量也比较大的时候选用OKhttp吧。

当然目前大多说App会使用Retrofit,所以自然就使用了OKhttp。

你可能感兴趣的:(android)