RXJava Scheduler / Threading如何为不同的运算符工作?

时间:2018-12-31 05:18:51

标签: android rx-java scheduler

有人可以帮我解释一下下面的代码正在运行哪个调度程序吗?

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

我的问题是 delay(),doOnComplete()和subscribe()哪个调度程序正在使用iomainThread

1 个答案:

答案 0 :(得分:1)

在深入研究RxJava线程之后,最近两天发现了处理RxJava线程/计划的经验法则:

  • observeOn仅适用于下游运营商
  • subscribeOn适用于下游和上游运营商
  • 连续/多个subscribeOn不会更改线程
  • 随后的observeOn确实更改了下游oerator的线程
  • 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