OKHTTP和Retrofit

来源:互联网 发布:mysql 基数低 不走索引 编辑:程序博客网 时间:2024/05/30 04:14

基本网络

基于NIO和Okio
NIO 就是 new IO,java 1.4之后采用的IO方案, 支持Buffer读写
OkIO 核心也是Buffer读写,内部使用了一个Segment和SegmentPool,维持着一个链表,其循环利用的机制和Android中Message的利用机制是一模一样的

Segment Buffer的写操作,实际上就是不断增加Segment的一个过程,读操作,就是不断消耗

Segment中的数据,如果数据读取完,则使用SegmentPool进行回收。

当复制内存数据时,使用Segment的共享机制,多个Segment共享一份data[]。

Buffer更多的逻辑主要是跨Segment读取数据,需要把前一个Segment的尾端和后一个Segment的前端拼接在一起,因此看起来代码量相对多,但其实开销非常低。


支持 SPDY
基于TCP的应用层协议,是对HTTP协议的增加,包括数据流的多路复用,报头压缩,请求优先级等

支持GZIP
有GZIPInputStream , GzipSource(OutputStream) ,GzipSink(InputStream)

封装了线程池,数据转换,基本错误处理等

Android 4.4之后替代了HtpUrlConnection


Retrofit

异步请求的发送请求过程

步骤1:对网络请求接口的方法中的每个参数利用对应ParameterHandler进行解析,再根据ServiceMethod对象创建一个OkHttp的Request对象;
步骤2:使用OkHttp的Request发送网络请求;
步骤3:对返回的数据使用之前设置的数据转换器(GsonConverterFactory)解析返回的数据,最终得到一个Response对象;
步骤4:进行线程切换从而在主线程处理返回的数据结果。