RxJava即时调度器类似于Immediate

3

Activity.runOnUiThread()的作用如下:

if (Thread.currentThread() != mUiThread) {
    mHandler.post(action);
} else {
    action.run();
}

这意味着,如果我在UI线程中,它会立即运行操作;如果不是,则将操作发布到处理程序。 我正在寻找类似此功能的RxJava Scheduler。 它是否存在?


立即运行的问题在于,如果该Runnable也在主线程上进行调度,那么就会出现递归,可能会导致StackOverflowError或者根本无法放弃主线程以执行其他任务。 - akarnokd
@akarnokd 抱歉,我无法理解您的意思。您能给一个例子吗? - ByungSun Park
@KuLdipPaTel 为什么你认为我的问题是你建议的重复?它们是不同的问题。 - ByungSun Park
1个回答

0

是的,很简单。

getSomeObservable().observeOn(AndroidSchedulers.mainThread())

.observeOn(AndroidSchedulers.mainThread())之后,您可以订阅您的observable并且回调将会进入主线程。

.subscribe(new Subscriber<Object>() {
                @Override
                public void onCompleted() {
                    Log.i(TAG,Thread.currentThread().getName());
                }

                @Override
                public void onError(Throwable e) {
                    Log.i(TAG,Thread.currentThread().getName());
                }

                @Override
                public void onNext(Object o) {
                    Log.i(TAG,Thread.currentThread().getName());
                }
            });

AndroidSchedulers.mainThread 始终会发布 always posts,即使 schedule 调用在主线程上。 - akarnokd
是的,我明白了。也许 Observable.just() 会更适合,因为我知道它会立即执行操作。 - Dmitriy Puchkov
“just”不会在任何特定的调度程序上运行。您需要一个可以将订阅/观察移动到主线程的操作符。 - akarnokd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接