1、Volley
Volley是Google官方推出的轻量级异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlConnection和OkHttp。但是在Android6.0以上的机型中不再支持HttpClient。Volley是在HttpUrlConnection的基础上进行的封装。
Volley基于 络队列,适合小数据频繁通信。Volley的 络请求线程池默认大小为4.意味着可以并发进行4个请求,大于四个,会派在队列中。
Volley在内部实现上采用了ByteArrayPool进行内存中的数据存储,ByteArrayPool只是一个小于4k的内存缓存池,当存储的时候优先从ByteArrayPool中取出一块已经分配好的内存区域,不必每次存数据都要进行内存分配,而是先查找缓存池中有无合适的内存区域,如果有,直接拿来用,从而减少内存分配的次数。但是这块内存的大小有限制,所以当进行上传或者下载大量数据的时候,这块内存容易溢出,造成OOM。这就是为什么Volley只适合数据量小,并发高的请求。
Volley在使用时,一般有三个线程:
主线程:产生一个请求对象并加入请求队列中;
缓冲线程:从请求队列中取出请求对象并经过一系列判断来确定是直接使用笨地缓冲响应数据还是进行 络请求。(yes)说明本地缓存数据可用,直接传递给主线程更新UI,(NO)说明本地缓存不可用或无缓存数据则进行 络数据请求。
络线程:直接进行 络数据的请求,并将响应数进行缓存或传递主线程更新。
2、OKhttp
OKHttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁,和Volley一样实现了http协议的缓存。
OKhttp重新实现了http协议,又有底层依赖。
具体实现可以参考我的另一篇博客:https://blog.csdn.net/u011897782/article/details/81252256
如果软件自身请求比较多,并且不涉及大文件,优先选用Volley,毕竟它效率比较高,开发相对简单,代码本身提及比较小。当软件 络请求比较复杂,数据量也比较大的时候,优先选用OKhttp.
3、Retrofit
Retrofit是基于OkHttp封装的一套RESTful(一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。) 络请求框架,底层默认采用的OkHttp.
优点:功能强大,支持异步和同步、支持多种数据的解析和序列化格式、支持RxJava;
简单易用,通过注解配置 络请求参数、采用大量设计模式简化使用;
可扩展性好,功能模块高度封装、解耦彻底,如自定义Converters等。
缺点:高度封装导致解析数据必须使用同意的格式converter,如果服务器不能给出统一的api形式,处理很困难。
请求过程:
APP应用程序通过Retrofit请求 络,实际上是使用REtrofit接口层封装请求参数、Header、Url等信息,之后由okhttp完成后续的请求操作;
在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!