我是 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/