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

标签 android rx-java rx-android

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/

相关文章:

android - 如何在设置 View 的 alpha 之前创建 1 秒的延迟?

android - 重复类错误 : Execution failed for task ':app:checkDebugDuplicateClasses'

java - 如何检查所有需要的订阅者是否完成了工作?

android - 从 Observable 获取元素的索引

android - 使用 LinearLayout 置换元素

android - 如何将复选框绑定(bind)到图像

java - RxJava。 Observable.delay 工作奇怪(最后缺少一些项目)

java - RxJava - 在另一个 Observable 完成时启动一个 Observable

java - 自定义过滤器运算符 RxJava

android - 使用 Retrofit 2 和 rxJava 连接多个调用