如何解决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,6)
.subscribe { value ->
Log.i("TEST","$value")
}
.dispose()
或
Observable.just(1,"$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 哪个线程发送和推送项目一直到观察者
- observeOn() -> 它将使用该调度器切换和传递剩余的(下游)操作的排放
- subscribe() -> 运算符返回一次性对象。您应该将此对象分配给变量或 CompositeDisposable 对象。当您的 Activity 或 Fragment 结束生命周期时,所有一次性物品都应该被处理(使用 dispose() 方法)以避免内存泄漏。
您可以在此处找到更多信息: https://proandroiddev.com/understanding-rxjava-subscribeon-and-observeon-744b0c6a41ea
http://reactivex.io/documentation/operators.html#creating
您还可以检查 Kotlin 协程作为 RxJava 的替代方案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。