Observable运行在主线程上的onNext中收到的Runnables,项目之间有延迟

时间:2016-06-30 16:05:04

标签: android multithreading rx-java

我希望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]

1 个答案:

答案 0 :(得分:3)

变化:

.observeOn(AndroidSchedulers.mainThread())
.delay(2, TimeUnit.SECONDS)

为:

.delay(2, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())