我希望Observable在主线程上的onNext中运行Runnable
,并且项目之间有延迟(在我的代码片段中它是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;但是它在&#34; RxComputationScheduler-2&#34;上运行。
我输出如下:
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]
答案 0 :(得分:3)
变化:
.observeOn(AndroidSchedulers.mainThread())
.delay(2, TimeUnit.SECONDS)
为:
.delay(2, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())