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

标签 android multithreading rx-java

我想要 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/

相关文章:

Android 应用程序在尝试启动新 Activity 时崩溃

windows - 为什么我不需要在 COM 线程内创建的线程中调用 CoInitialize?

c++ - 从不同的线程、不同的函数写入(登录)同一个文件?

android - 如何在 RxJava 2 和 Kotlin 中将 null 传递给具有可空类型的 Observable

java - 将 JSON POST 到服务器并接收响应

android - App 和 Play 商店中的定制应用程序

android - 无法覆盖 Fragment 中的 onCreateView

java - TestNG 测试外部对象的同步

android - 如何使用 Retrofit 和 RxJa 处理两个 JSON 响应?

android - 使用 RxJava/RxAndroid 的 Retrofit2 尾递归