okhttp、Retrofit 介绍

2019-06-27  本文已影响0人  天使飞吧

Android提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载等,够我们开发用。但OkHttp让应用运行更快、更节省流量。 

okhttp:能力:一般的get请求、一般的post请求、基于Http的文件上传、文件下载、加载图片、支持请求回调,直接返回对象、对象集合。

 Okhttp工作原理:

1,创建 OkHttpClient对象并且默认构造builder对象进行初始化;使用Builder模式处理需要很多参数的构造函数(缓存,超时,cookie,策略等),提高代码可读性。   

2,构建一个处理url的request;

3,生成call任务,执行execute异步线程池或者同步请求,控制任务队列的执行顺序。

4,拦截器拦截,发送http请求,获取response;

       拦截器有:失败重定向,获取数据并缓存,网络拦截等

1)在配置 OkHttpClient 时设置了拦截器Interceptors

2)负责失败重试以及重定向的 RetryAndFollowUpInterceptor;

3)负责把用户构造的请求转换为发送到服务器的请求、把服务器返回的响应转换为用户友好的响应的 BridgeInterceptor;

4)负责读取缓存直接返回、更新缓存的 CacheInterceptor;

5)负责和服务器建立连接的 ConnectInterceptor;

6)重定向和重试的 网络拦截器 networkInterceptors;

7)负责向服务器发送请求数据、从服务器读取响应数据的 CallServerInterceptor。

OkHttp的这种拦截器链采用的是责任链模式,这样的好处是将请求的发送和处理分开,并且可以动态添加中间的处理方实现对请求的处理、短路等操作分工明细。

okHttp的底层是通过Java的Socket发送HTTP请求与接受响应的有其自己的特点:

1)支持http2,对一台机器的所有请求共享同一个socket ,提升网络速度

2)内置连接池,支持连接复用,减少延迟

3)使用okio 简化数据的存储与访问,提高性能。

Retrofit : 基于okHttp的、一种轻量级且安全的、并使用注解方式的网络请求框架

1. Retrofit使用注解方式,大大简化了我们的URL拼写形式

2. 使用简单,层次分明

3. 支持同步和异步执行

4. 更大自由度的支持我们自定义的业务逻辑

Rertrofit工作流程:

1首先定义请求接口

2通过Retrofit生成一个刚才定义的接口的实现类。

3接口进行请求:Retrofit使用注解+java接口来定义后台服务API接口

Retrofit使用的关键一步就是Retrofit.create函数创建接口动态代理

调用流程:

第一步、加载对应method的ServiceMethod实例:

首先加载需要的变量,然后创建一个该method对应的ServiceMethod实例并保存到缓存中,最后对method的定义做合法性检查

第二步、使用ServiceMethod实例和方法调用参数创建OkHttpCall来执行网络求

第三步、调用serviceMethod.callAdapter.adapt(okHttpCall)来产生method所定义的返回

Retrofit原理:

1、首先调用接口

2、retrofit对象创建一个API接口对象,使用动态代理,返回了一个OkHttpCall对象,拿到这个 Call 对象执行 HTTP 请求

3、使用动态代理对象ApiManager调用getData方法 时会被动态代理拦截创建一个 ServiceMethod对象来获取获取Http请求的方式get或者post

4、OkHttpCall是实现了Call接口的,OkHttpCall调用 ServiceMethod 获得一个可以执行的 Request 对象,然后等到 Http 请求返回后,再将 response body 传入 ServiceMethod 中, ServiceMethod 就可以调用 Converter 接口将 response body 转成一个Java对象。--执行Http请求

上一篇 下一篇

猜你喜欢

热点阅读