• 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对象,到此一次网络请求完成
  • 相关阅读:
    Linux性能调优
    Linux动态库搜索路径的技巧
    [转]Linux动态库的种种要点
    [转]谈谈Linux下动态库查找路径的问题
    性能测试的几种业务模型设计
    性能测试解惑之并发压力
    一个系统的最大并发用户数为1100,怎么能推算出该系统的支持最大用户数
    IP欺骗
    关于Cocos2d-x随机数的生成
    关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置
  • 原文地址:https://www.cnblogs.com/androiddream/p/9147843.html
Copyright © 2020-2023  润新知