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 的替代品
我是 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 的替代品