gpt4 book ai didi

android - RxJava 中 AndroidSchedulers.mainThread() 的替代方案是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:46 24 4
gpt4 key购买 nike

RxJava 中是否有一个 Scheduler api 与 RxAndroid 中的 AndroidSchedulers.mainThread() 同义。因此,如果我在新线程上安排任务并想在 Java 主线程上观察它,我该怎么做?

编辑下面是一个 RxSubscription 示例,带有 system.in 注释,主线程被终止,而 Observable.interval 在单独的线程上运行。在 Android 中,我可以说 observeOn(AndroidSchedulers.MainThread) 之后的任何操作都将在主线程上运行。我正在 Java 中寻找类似的调度程序,因为 AndroidSchedulers 是 RxAndroid 的一部分。

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import rx.Observable;

public class Main {

public static void main(String[] args) throws InterruptedException, IOException {

Observable<Long> values = Observable.interval(1000, TimeUnit.MILLISECONDS);
values.subscribe(
v -> System.out.println("Received: " + v),
e -> System.out.println("Error: " + e),
() -> System.out.println("Completed")
);
//System.in.read();
}
}

最佳答案

返回到“主”Java 线程目前是不可能的,因为 RxJava 1.x 没有阻塞调度器。

如果你可以升级到 RxJava 2.x,我有一个特殊的调度器可以“固定”到当前线程:

compile "com.github.akarnokd:rxjava2-extensions:0.15.1"

BlockingScheduler

This type of scheduler runs its execution loop on the "current thread", more specifically, the thread which invoked its execute() method. The method blocks until the shutdown() is invoked. This type of scheduler allows returning to the "main" thread from other threads.

public static void main(String[] args) {
BlockingScheduler scheduler = new BlockingScheduler();

scheduler.execute(() -> {
Flowable.range(1, 10)
.subscribeOn(Schedulers.io())
.observeOn(scheduler)
.doAfterTerminate(() -> scheduler.shutdown())
.subscribe(v -> System.out.println(v + " on " + Thread.currentThread()));
});

System.out.println("BlockingScheduler finished");
}

关于android - RxJava 中 AndroidSchedulers.mainThread() 的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com