如何保留rx Scheduler而不将其作为方法参数?

时间:2017-09-15 15:22:45

标签: rx-java rx-android rx-java2

如果我这样做:

Observable.just(1)
.flatMap(
    //inner chain
    Observable.just(2)
        .subscribeOn(Schedulers.newThread())
)
.map(// we are in the inner chain thread! //)
.subscribeOn(Schedulers.newThread())
.subscribe()

然后内线将"泄漏"到主要的可观察链。 如何保存原始线程?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您必须在flatMap

之前和之后指定相同的计划程序
Scheduler scheduler = ...

Observable.just(1)
    .subscribeOn(scheduler)
    .flatMap(v -> Observable.just(2).subscribeOn(newThread()))
    .observeOn(scheduler)
    .subscribe()

如果您想要返回完全相同的线程,可以指定单线程调度程序:

 scheduler = Schedulers.from(Executors.newSingleThreadedExecutor());

使用非真正的公共消费

 scheduler = new SingleScheduler();

或采用任何标准调度程序并使用RxJava 2 Extension项目的SharedScheduler

 scheduler = new SharedScheduler(Schedulers.computation());