Retrofit RxJava 源码学习体会

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()
 
 

猜你喜欢

转载自www.cnblogs.com/nuomiMA/p/9467088.html