RxJava调度器以在主线程上观察

22

如果我像这样写,那么当前线程将同时执行操作和通知...

Observable.fromCallable(() -> "Do Something")
    .subscribe(System.out::println);

如果我像这样在后台线程上执行操作,那么操作通知都将在后台线程上执行...

Observable.fromCallable(() -> "Do Something")
    .subscribeOn(Schedulers.io())
    .subscribe(System.out::println);

如果我想在主线程上观察并在后台执行 Android 中的操作,我应该这样做...

Observable.fromCallable(() -> "Do Something")
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(System.out::println);

但如果我正在编写标准的Java程序,那么如何表明要在主线程上观察等价物呢?


3
由于Java主线程不是池/循环器,因此您需要一个阻塞调度程序。这仅适用于RxJava 2.x扩展项目中:https://github.com/akarnokd/RxJava2Extensions#blockingscheduler - akarnokd
2个回答

16

对于 RxJava2,请使用 "blockingSubscribe()"

Flowable.fromArray(1, 2, 3)
                .subscribeOn(Schedulers.computation())
                .blockingSubscribe(integer -> {
                    System.out.println(Thread.currentThread().getName());
                });

7

通过 .toBlocking() 方法将 Observable 转换为 BlockingObservable,这样可以获取阻塞方法来等待完成、获取一个项目等。


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