Retrofit源码解析(三)

使用Retrofit的时候我们会声明一个接口:

Retrofit源码解析(三)_第1张图片

我们可以看到接口中的方法的返回值都是Call类,这和我上一节讲动态代理的时候举的那个String的例子很类似,实际上Retrofit也是那么设计的,下面让我们看使用实例:

 return  mRetrofit.create(ApiService.class);

上面这句话是所有的Retrofit中必须使用的,创建请求接口动态代理成实现方法,具体如何实现?看源码(没错!就是我上节课讲的那样那个例子)

Retrofit源码解析(三)_第2张图片

  ServiceMethod serviceMethod =
                (ServiceMethod) loadServiceMethod(method);
            OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args);
 return serviceMethod.callAdapter.adapt(okHttpCall); 
  

这段代码的意思就是将这个接口中的方法,注解,和参数封装成一个Call(OkHttpCall),这个adapt方法是不是很熟悉?去看看上节课的留下的那段代码:

@Override public Call adapt(Call call) {
        return new ExecutorCallbackCall<>(callbackExecutor, call);
      } 
  

其实返回的就是一个执行回调请求,也就是说我们动态代理最后的结果就是一个带有回调可以在主线程运行的Call,这些我们都明白了,还有最后一点最重要的就是,我们定义的注解和值,还有参数,Retrofit是如何拿到并且封装成Call的呢?

ServiceMethod

 Adapts an invocation of an interface method into an HTTP call. 

 将接口执行的方法适配成一个Http请求

Retrofit源码解析(三)_第3张图片

Retrofit源码解析(三)_第4张图片

至此就把Retrofit整个来龙去脉讲了一遍,可能忽略了部分细节,需要读者自行阅读源码探明究竟,写的时候逻辑可能混乱,不足之处欢迎在博客下方留言,我会积极改进的!总结整个Retrofit2.0,其实就是这几个类发挥着重要的作用!

ServiceMethod

Retrofit

ExecutorCallAdapterFactory

Platform

你可能感兴趣的:(Android)