android - Rx Java Android 中的混淆

标签 android kotlin rx-java

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

相关文章:

Java Android : Set variable from AsyncTask?

android - 改造 2.0 + RxJava + 错误 JSON 正文

java - Single.retry(3) 仅调用一次

java - Maven 中的集成测试问题

android - 如何在 RxJava2 中使用带有 lambda 表达式的 DisposableObserver

java - Android:ListView中的文件列表

android - Android 中的设备 API 版本不正确

android - 如何使用node-rsa加密node.js中的数据并在android中解密加密的数据?

android - 如何从构造函数获取参数?

java - 用于 base64 图像的自定义 Glide ModelLoader