• rxjava 调用retrofit执行网络请求的过程


    retrofit流程图
    -1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅
     
    0.从业务中发起网络请求调用具体接口
    RobotApiService就是Retrofit需要的接口文件
     
    1.在RobotApiService文件中会新建一个Retrofit对象添加RxJava2CallAdapterFactory对象用以产生RxJava2CallAdapter,
    Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(AppConstants.get_IP_ADDR() + "/")
    .client(builder.build())//okHttp client对象
    .addConverterFactory(GsonConverterFactory.create())
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();
    2.Retrofit对象调用create()产生API接口的一个代理对象。
    retrofit.create(RobotApiService.class);
    3.在代理对象中拦截需要代理执行的方法Method,通过method对象,构建一个ServiceMethod 对象。执行callAdatper接口的adapt().
    而具体callAdapter实现对象RxJava2CallAdapter是在loadServiceMethod()方法new  ServiceMethod对象时,根据入参method对象的返回值类型:Observable.class,从Retrofit对象包含的list中查询到的,而list是在什么时候添加的呢?就是在上边new Retrofit对象时addCallAdapterFactory()添加的
    4.接上图代码的最后一步,执行callAdatper接口的adapt(),callAdapter接口的实现对象RxJava2CallAdapter的adapt();会创建Observable被观察者BodyObservable,然后将这个Observable对象返回。
    5.回到-1项,调用返回的Observable对象(实际是上图的BodyObservable对象)的subcribe()方法(基类方法),会执行subscribeActual()
    而BodyObservable对象中的subscribeActual(),会将被观察者Observable和观察者Observer关联起来。
    在调用subscribeActual()方法时会调用upstream的subscribe()即4.项中图片上第一红框CallObservable的subscribe()在执行subscribeActual()
    6.在CallObservable的subscribeActual()中会执行call的execute()执行网络请求获取服务器的调用结果,然后传给观察者observer.onNext(),其中observer就是上图红框中BodyObserver对象,而BodyObserver对象中执行observer.onNext(response.body());时的observer对象就是-1.项中new的BaseObservable对象,到此一次网络请求完成
  • 相关阅读:
    单例模式
    二、CSS
    十一、多线程
    十二、协程
    十、多进程
    九、内存管理
    八、元类
    七、上下文管理器/魔术方法
    六、单例模式
    五、装饰器
  • 原文地址:https://www.cnblogs.com/androiddream/p/9147843.html
Copyright © 2020-2023  润新知