Retrofit流程
2022-05-10 17:59:11 0 举报
Retrofit流程
作者其他创作
大纲/内容
Retrofit.create()
Platform.defaultCallAdapterFactories实际是创建了DefaultCallAdapterFactory
探究这个callAdapter 到底是什么
当我们使用Retrofit的时候调用 call.enqueue 时到底发生了怎么样的流程?
invoke是接口 探究invoke到底调用的是那个实现类
返回了CallAdapted
HttpServiceMethod.parseAnnotations()
从动态代理开始入手
默认的callAdapter时DefaultCallAdapterFactor.get()方法返回的匿名对象它的 adapt() 方法返回了一个ExecutorCallbackCall对象
callAdapter.adapt(call)
由于invoke是接口转过头去看loadServiceMethod
loadServiceMethod(method).invoke(args)
CallAdapted.adapt()
判断接口是否合规validateServiceInterface()
adapt是接口 探究adapt到底调用的是哪个实现类
总结:当我们使用Retrofit(默认无特殊配置的情况)的代理类(ApiServices接口)进行请求时,Retrofit通过动态代理的方式返回给我们一个 ExecutorCallbackCall 对象,其enqueue方法实现了使用OkHttp发起请求,并且切换线程触发我们传入的回调方法。
HttpServiceMethod.parseAnnotations
也就是说在使用Retrofit时调用的enqueue最终是调用到了ExecutorCallbackCall.enqueue(final Callback<T> callback);ExecutorCallbackCall源码很简单内部有callbackExecutor、delegate两个成员;callbackExecutor 是一个主线程Executor,回调方法就是利用它切回到主线程的;delegate字面意思代理,是在HttpServiceMethod.invoke()方法中新建的OkHttpCall;Retrofit是基于OkHttp封装的,这个OkHttpCall的作用就是用OkHttp去发起请求,在请求的回调中调用我们传递给Retrofit的CallBack;
Retrofit.build()中有默认赋值platform.defaultCallAdapterFactories(callbackExecutor)
loadServiceMethod(method).invoke(args) 实际相当于调用了HttpServiceMethod.invoke
收藏
0 条评论
下一页