Rx 混乱 Java Android

Confusion in Rx Java Android

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

上执行
  • Observable.just(1,2,3,4,5,6) -> Just 运算符将一个项目转换为一个 Observable 并发出这些项目。
  • subscribeOn() -> 运算符告诉源 Observable 发出哪个线程并将项目一直推送到 Observer
  • observeOn() -> 它将使用该调度程序切换并传递排放以进行剩余的(下游)操作
  • subscribe() -> operator returns 一次性对象。您应该将此对象分配给变量或 CompositeDisposable 对象。当你的 Activity 或 Fragment 结束生命以避免内存泄漏时,所有一次性用品都应该被处置(使用 dispose() 方法)。

您可以在这里找到更多信息: https://proandroiddev.com/understanding-rxjava-subscribeon-and-observeon-744b0c6a41ea

http://reactivex.io/documentation/operators.html#creating

您还可以检查 Kotlin Coroutines 作为 RxJava 的替代品