Android Retrofit框架源码分析(调用篇)

Android技术研究原创如需转载请注明出处

1、配置篇

2、创建篇

前两篇分析了Retrofit的配置和创建,这篇分析Retrofit的调用,先模拟一个调用的场景,代码如下:

默认看这篇文章的用户已经读过配置篇及创建篇,这个时候已经获取了HttpService的代理对象了

public interface HttpService {
@FormUrlEncoded
@POST("/App/Login.ashx")
public Observable login(@FieldMap Map params);
}
以上是一个接口,里面包含了一个login方法,现在开始模拟一个login的调用,代码如下:

httpService.login(params)

现在场景已经模拟出来了,那么回顾创建篇中的Retrofit.create(HttpService.class)所做的事情,代码如下:

Android Retrofit框架源码分析(调用篇)_第1张图片
HttpService_proxy_create.png

return之前的方法在创建篇已经做过分析,现在来分析return的相关代码,这里可以看到在create的时候返回了一个动态代理。

1、Java 动态代理作用是什么?
2、代理模式及Java实现动态代理

那么现在明确了,当login方法被调用的时候,代理对象会调用它的invoke方法,我们主要分析loadMethodHandler方法,以下是相关代码:

invoke中的前两个if在当前流程不会进入,略过。

Android Retrofit框架源码分析(调用篇)_第2张图片
loadMethodHandler.png

以上这段代码在昨天的创建篇中已经分析过了,现在就不做具体分析了,在这个方法掉用的过程中获取了CallAdapter、Converter、RequestFactory对象,接着分析invoke方法,代码如下:

invoke.png

看以上代码中callAdapter.adapt方法调用,在创建篇中我们已经知道普通的调用流程获取的CallAdapter的实际类型是SimpleCallAdapter,现在就可以解释创建篇中SimpleCallAdapter的adapt实现的逻辑了,以下是相关代码:

Android Retrofit框架源码分析(调用篇)_第3张图片
adapt.png

以下代码回调了OkHttpCall对象的execute方法,访问网络获取数据

Android Retrofit框架源码分析(调用篇)_第4张图片
CallOnSubscribe.png
Android Retrofit框架源码分析(调用篇)_第5张图片
execute.png

我们在创建篇已经获取了OkHttpCall请求时用到的所有数据,因此这里可以直接拿来用,细节上就不做太多解释了。

Retrofit的配置、创建、调用的基本流程大概就是这样,后面有空再分析下其他细节上的东西。

你可能感兴趣的:(Android Retrofit框架源码分析(调用篇))