我想要 Observable 运行在主线程上的 onNext 中接收到的 Runnable,并在项目之间有延迟(在我的代码 fragment 中为 2 秒)。
到目前为止我已经:
Subscription xxx = Observable
.create(new Observable.OnSubscribe<Runnable>() {
@Override
public void call(Subscriber<? super Runnable> subscriber) {
gate = subscriber;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.delay(2, TimeUnit.SECONDS)
.subscribe(new Action1<Runnable>() {
@Override
public void call(Runnable runnable) {
Log.d(TAG, "call " + Thread.currentThread().toString());
runnable.run();
}
});
然后某个线程的某个地方调用 gate
实例的 onNext
方法,例如:
Log.d(TAG, "gate requested on thread " + Thread.currentThread().toString());
gate.onNext(new Runnable() {
@Override
public void run() {
Log.d(TAG, "make it on thread " + Thread.currentThread().toString());
}
});
但是......它没有按我想要的方式工作。我想要的是: .observeOn(AndroidSchedulers.mainThread())
应该在主线程上运行 Runnables;但它在“RxComputationScheduler-2”上运行。
我得到的输出如下:
gate requested on thread Thread[Binder_2,5,main]
gate call Thread[RxComputationScheduler-2,5,main]
gate make on thread Thread[RxComputationScheduler-2,5,main]
最佳答案
更改:
.observeOn(AndroidSchedulers.mainThread())
.delay(2, TimeUnit.SECONDS)
至:
.delay(2, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
关于android - Observable 运行在主线程上的 onNext 中接收到的 Runnables,项目之间存在延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128267/