gpt4 book ai didi

android - Rx Java Android 中的混淆

转载 作者:行者123 更新时间:2023-12-05 05:58:36 24 4
gpt4 key购买 nike

我是 rx 的新手,有几行代码让我感到困惑:

Observable.just(1,2,3,4,5,6)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { value ->
Log.i("TEST", "$value")
}
.dispose()

它不会记录结果,但是当我注释掉 subscribeOn () 和 observeOn() 或 dispose() 时,它会完美运行,如下所示:

Observable.just(1,2,3,4,5,6)
.subscribe { value ->
Log.i("TEST", "$value")
}
.dispose()

Observable.just(1,2,3,4,5,6)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { value ->
Log.i("TEST", "$value")
}

谁能解释一下这条链中发生了什么

最佳答案

当您编写 .subscribeOn(Schedulers.io()) 时,这实际上意味着 Observable 将在 io 线程上运行,这将需要线程切换,从而导致一些延迟。到它发生时,您已经调用了 dispose() 方法来处理 Observable,因此您不会收到任何输出。

另一方面,如果你删除

.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())

这意味着 Observable 将在调用线程上运行,因此不需要线程切换,因此在执行 dispose() 方法调用之前您会收到完整的输出。

如果你只删除 dispose() 那么没有什么可以阻止 Observable 发出它的内容,即使它在 io 上执行也是如此

关于android - Rx Java Android 中的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68452378/

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