【发布时间】:2019-05-26 05:42:36
【问题描述】:
我正在将自定义库 (dataClient) 回调 api 包装到 RxJava Flowable。 dataClient 使用自己的线程,所以它的回调是在自己的线程上调用的。
在我的 Rx 链中,我尝试使用 .subscribeOn(Schedulers.computation()) 指定计算调度程序。尽管如此,当我在我的 Rx 链上打印线程名称时,我得到了我的 dataClient 线程。
我应该怎么做,让我的 Flowable 使用.subscribeOn() 中指定的线程?
Flowable.create({ emitter ->
dataClient.setCallback(object : Callback {
override fun message(message: DataModel) {
emitter.onNext(vehicle)
}
override fun done() {
emitter.onComplete()
}
})
emitter.setCancellable {
dataClient.setCallback(null)
}
}, BackpressureStrategy.BUFFER)
.subscribeOn(Schedulers.computation())
.doOnNext { Log.e("DATA", Thread.currentThread().name) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { data -> Log.d("DATA", "Got data" + data.id)) }
【问题讨论】:
-
要将
onNext信号移动到另一个线程,请使用observeOn。subscribeOn用于将订阅副作用移动到另一个线程,并且对拥有自己的发射线程的源几乎没有影响。 -
是的,
observeOn可以移动到另一个线程,但在这种情况下,subscribeOn有什么用处? -
除非
setCallback有特殊的线程需求,比如需要从UI或者一些工作线程中调用,否则没有。
标签: java android kotlin rx-java2