如何在不将其作为方法参数的情况下保留 rx Scheduler?

How to preserve rx Scheduler without getting it as a method parameter?

如果我这样做:

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

然后内线程将"leak"到主可观察链。 如何保留原线程?

提前致谢!

您必须在 flatMap

之前和之后指定相同的调度程序
Scheduler scheduler = ...

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

如果您想 return 到完全相同的线程,您可以指定一个单线程调度程序:

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

使用不是真正用于-public-消费

 scheduler = new SingleScheduler();

或者采用任何标准调度程序并使用 RxJava 2 扩展项目的 SharedScheduler:

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