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发起网络访问
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8