【问题标题】:RxJava Immediate-like Scheduler类 RxJava 即时调度器
【发布时间】:2023-03-11 02:47:01
【问题描述】:

Activity.runOnUiThread() 有这个:

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

这意味着,如果我在 UI 线程中,它会立即运行操作,如果我不在,它会向处理程序发布操作。 我正在寻找像这样的功能的 RxJava 调度程序。存在吗?

【问题讨论】:

  • 立即运行的问题是,如果Runnable 也在主线程上调度,你会得到一个可能导致 StackOverflowError 的递归,或者根本不会放弃主线程来执行其他任务。
  • @akarnokd 抱歉,我听不懂。能举个例子吗?
  • @KuLdipPaTel 为什么您认为我的问题与您的建议重复?它们是不同的问题。

标签: android multithreading rx-java


【解决方案1】:

是的,很简单。

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 调用在主线程上。
  • 是的,我明白了。可能是 Observable.just() 将套件,因为我知道它会立即采取行动。
  • just 不在任何特定的调度程序上运行。您需要一个可以将订阅/观察移动到主线程的操作员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2017-11-19
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多