我对一个可观察对象有一个特殊的需求。
通常,我的观察对象运行在不同的线程中。但是,有时他们需要在订阅过程中阻塞另一个线程。未来的行为方式
一个例子:
val o = Observable.create(/* computation */)
.subscribeOn(Schedulers.newThread())
.observeOn(/* current thread */);
val s = o.subscribe(/* subscriber */);`
突然,另一个线程上发生了一个事件,通知当前线程应该等待订阅s
的执行。(Android的onPause
就是一个例子。)
我该怎么做?我如何等待订阅s
,甚至可能检索所有的结果?
(科目?)
最简单的解决方案似乎是:
- 使用
Observable#cache()
将观察对象设置为缓存观察对象。(如果你的可观察对象是一个值流,使用一个合适的Subject作为可观察对象。) - 订阅缓存的observable/subject。
- 当事件发生时,只需在你需要的线程上订阅缓存的observable/subject。根据需要取消订阅。