美文网首页程序员
Android源码剖析----Retrofit的工作原理

Android源码剖析----Retrofit的工作原理

作者: 简书不简单iiii | 来源:发表于2019-01-12 21:35 被阅读14次

    现实开发中用到的框架为了方便更好的理解加深记忆,归纳如下:        

            做Android开发网络请求可是必经之路 ,想当年刚开始做开发的时候使用过httpClient 手写get和post,也使用过Volley,还是用过XUtils等一些框架,很大程度上方便了开发,retrofit是在17年的时候项目重构的时候引入是用的(原谅我是个喜新厌旧的码奴),使用后感觉好嗨呦!感觉人生已经达到了巅峰 ! 主要是因为其强大的解耦能力和可扩展性!

            用了这么久的retrofit不应该留在知其然不知其所以然呀。然后就挑灯夜读,悬梁刺股的研究了一下源码,还好源码不太多,算是对其工作原理有了大致的了解 首先呢retrofit的源码目录就这么多

    retrofit目录

        先进入retrofit类中看一下retrofit类中的成员变量

    retrofit成员变量

        看着这些会发现这些不就是在创建retrofit的时候使用build构建对象的时候需要传入的参数,额外注意一下那个map集合中的ServiceMethod

        接下来看build方法

    build方法

        在这个方法里会把前面传入的参数给配置,当然也可以看出retrofit底层其实还是通过okhttp进行网络请求的

        继续看就是关键的create方法了,所有神奇的变化都是在这个方法里面进行的

    create

        在create中使用了动态代理把传入的接口class对象中的接口实例给返了回来,也就是proxy.newProxyInstance返回了接口的实例,其中它内部需要传递一个类的加载器,类本身以及一个InvocationHandler处理器,主要的动作都是在InvocationHandler中进行的,它里面只有一个方法invoke()方法,每当我们调用代理类里面的方法时invoke()都会被执行,并且我们可以从该方法的参数中获取到所需要的一切信息,比如从method中获取到方法名,从args中获取到方法名中的参数信息等,,,,接着往下看

    几行厉害的代码

        这里会发现每个方法都生成了一个serviceMethod,oadServiceMethod方法先从map缓存中找该方法对应的ServiceMethod对象,如果没有则生成。根据ServiceMethod对象和参数得到了OkHttpCall对象。再由方法对应的callAdapter将OkHttpCall适配成想要的异步回调接口

    所以呢retrofit的大致工作原理就是:

            使用建造者模式创建retrofit实例,使用动态代理模式和注解动态创建服务类和方法,创建过程中根据每个method类生成ServiceMethod类,这个类中包含了注解信息和参数信息,在这个过程中根据method的信息创建一个对call处理的工厂类对象,并且根据注解获取相关对注解处理的对象,然后这些注解对象会转换生成okhttp请求所需要的Request对象,再接着将ServiceMethod和输入参数赋值给OkhttpCall这个类,这个类在之后将配合callbackExecutor这个线程控制的类,以及ServiceMethod生成的Request对象,内部调用Okhttp进行请求和回调。

    相关文章

      网友评论

        本文标题:Android源码剖析----Retrofit的工作原理

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