gpt4 book ai didi

android - RXJava 调度程序/线程如何为不同的运算符(operator)工作?

转载 作者:行者123 更新时间:2023-11-29 23:22:46 25 4
gpt4 key购买 nike

谁能帮我解释一下代码下面运行的是哪个调度程序?

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

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

最佳答案

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

  • observeOn 仅对下游运算符起作用
  • subscribeOn 适用于下游和上游运营商
  • 连续/多次subscribeOn不换线程
  • 随之而来的observeOn确实改变了下游操作者的线程
  • 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

关于android - RXJava 调度程序/线程如何为不同的运算符(operator)工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53983854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com