美文网首页
okhttp、Retrofit 介绍

okhttp、Retrofit 介绍

作者: 天使飞吧 | 来源:发表于2019-06-27 20:21 被阅读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请求

    相关文章

      网友评论

          本文标题:okhttp、Retrofit 介绍

          本文链接:https://www.haomeiwen.com/subject/myjdcctx.html