美文网首页实际
retrofit源码解析(一)

retrofit源码解析(一)

作者: 苍龙阁阁主 | 来源:发表于2017-10-12 12:25 被阅读37次

    retrofit是Square公司对OKHTTP封装的网络请求框架,完美支持rxjava,主要思想是使用java的动态代理和注解通过反射获取okhttp需要的参数,方便开发人员通过路由表的形式来管理访问链接,本人分三部分分别记录retrofit的实例化 ,网络请求 ,以及参数解析,本篇为retrofit的实例化流程:

    retrofit的入口为Retrofit类,Retrofit使用builder模式来构建参数

    retrofit builder 参数

    platform是平台,retrofit可以支持android ,java8和ios,platform使用的单例模式实例化,通过Platform类 的findPlatform()来判断当前使用的平台

    platform android

    android palatform就是获取主线程池,并设置handler的回调,callFactory是OKHTTP,baseurl为链接,converterFactories为流转换器,gson转换器GsonConverterFactory就是放在这里面,

    adapterFactories为适配器,rxjava的RxJavaCallAdapterFactory放在这个列表里,callbackExecutor为回调线程

    builder build()

    在builder build的时候,会获取平台的回调线程,android平台为主线程

    通过builder初始化参数后,在build()中创建Retorfit实例,在需要请求网络的时候,通过create()调用,create()的参数为路由表类接口

    retrofit 路由表

    retrofit通过注解获取访问参数

    注:Java代理模式相关资料

    retrofit create

    retrofit 通过调用create()反射method来调用okhttp访问网络,create中,通过java反射来获取servicemethod类的实例,并吧相关注解信息传递给servicemethod类

    servicemethod builder

    mothodAnnotations为method注解,parameterTypes为method返回类型的泛型,parameterAnnotationsArray为method参数注解

    在servicemethod builder build()方法中,对路由表中的方法信息进行解析

    servicemethod build

    在build中,通过createCallAdapter()获取okhttp网络访问的adapter

    servicemethod cerateCallAdapter()

    在createCallAdapter中,获取方法返回类型以及method的注解,然后调用retrofit的calladapter获取calladapter,在callAdapter中,如果设置了RxJavaCallAdapterFactory,会返回RxJavaCallAdapterFactory的实例,否则会返回默认的ExecutorCallAdapterFactory

    (注:retrofit配合rxjava会更简洁,所有以下会使用RxJavaCallAdapterFactory,而不是ExecutorCallAdapterFactory)

    ,在calladapterFactory中,开始访问网络,什么时候调用网络请求的呢?可以看retrofit的create()方法中

    通过动态代理,获取到RxJavaCallAdapterFactory的实例,然后调用adapter  的adapt方法,开始通过okhttp发起网络访问

    这部分就是retrofit 的实例化流程,那retrofit是如何请求网络的呢?下回分解

    retrofit源码解析(二)网络请求

    retrofit源码解析(三)参数解析

    retrofit 封装 git

    原创,转载请标明

    相关文章

      网友评论

        本文标题:retrofit源码解析(一)

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