Retrofit.
<T> T create(final Class<T> service) 方法:通过动态代理的方式生成了代理类。
其中最重要:
Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
new InvocationHandler() {
private final Platform platform = Platform.get();
@Override public Object invoke(Object proxy, Method method, Object... args)
throws Throwable {
........
ServiceMethod serviceMethod = loadServiceMethod(method);【该类,Builder内部类解析,自己定义的接口类,包括参数、注解。最终传递给父类】
OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args);【继承自Retrofit.Call ,内部方法均和Http3.Call一样,并且是指调用Http3.Call的方法】
return serviceMethod.callAdapter.adapt(okHttpCall);【callAdaper是RxJavaCallAdapterFactory.get()返回对应的CallAdapter,adapt方法返回Observable】
}
});
okHttpCall,
变量ServiceMethor,
该变量通过Retorift.callFactory(okhttp3.Call.Factory),返回okhttp3.Call.Factory(继承自OkHttpClient))
OkHttpClient.newCall 返回RealCall对象(继承【I】okhttp3.Call)
总结okHttpCall,通过RealCall对象进行request(),cancle(),enqueue(),excute()
RxJavaCallAdapterFactory 三个内部类,均集成CallAdapter<T>
ResponseCallAdatper,SimpleCallAdapter,ResultCallAdapter
RxJavaCallAdapterFactory.get()根据其参数返回上面三个任一
这三个类,扩展adapt(),均返回Observable,且这三的OnSubscribe【I】都是CallOnSubscribe扩展类。
CallOnSubscribe 有继承自Retrofit.Call接口类。 ,也就是 OkHttpCall
__________________________________________
Observable:
subscribe(Subscriber<? super T> subscriber, Observable<T> observable) 干实事。
该方法主要是:
RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber);(主要是call()方法,下图的call)
RxJavaHooks.onObservableReturn(subscriber);(subscriber,是用户传入的)
也就是oKHttpCall.call()-> RealCall.excute()