代码之家  ›  专栏  ›  技术社区  ›  0xAliHn

RXJava调度程序/线程是如何为不同的操作员工作的?

  •  1
  • 0xAliHn  · 技术社区  · 6 年前

    谁能帮我解释一下哪个调度器在代码下面运行?

    Completable.complete()                 
    .subscribeOn(http://Schedulers.io  ())                 
    .observeOn(AndroidSchedulers.mainThread())                 
    .delay(5000, TimeUnit.MILLISECONDS)                 
    .doOnComplete(() -> liveDataState.postValue(""))                 
    .subscribe()
    

    我的问题是哪些调度程序是 delay()、doonComplete()和subscribe() 正在使用 io mainThread ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   0xAliHn    6 年前

    在过去两天深入研究rxjava线程之后,发现了处理rxjava线程/调度的经验法则:

    • observeOn 仅在下游运营商工作
    • subscribeOn 为下游和上游运营商工作
    • 连续/多次 认购 不要换线
    • 随之而来的 观察 务必更换下游发电机的螺纹
    • 不像 subscribeOn() 我们可以用 observeOn() 多次 无缝线程切换
    • 类似操作员 delay() , interval() 具有默认调度程序,也可以更改下游调度器。

    所以,对我来说:

    Completable.complete()   // IO scheduler based on subscribeOn scheduler           
    .subscribeOn(http://Schedulers.io  ())                 
    .observeOn(AndroidSchedulers.mainThread())                 
    .delay(5000, TimeUnit.MILLISECONDS)   // Default Computation scheduler              
    .doOnComplete(() -> liveDataState.postValue(""))  // Computation scheduler by delay scheduler             
    .subscribe()  // Computation scheduler by delay as well
    

    此外,您可以查看大理石图以获得更多的理解:

    enter image description here