我已经阅读了RxJava的文档,并尝试了下面的演示: 输出为 d =[0]d = 假
我可以知道原因吗:为什么数据不发送到Observer
RxJava版本:2.2.6
Observable.just("aa","bbb")
.observeOn(Schedulers.newThread())
.map(s -> {
System.out.println("s = [" + s + "]");
return s.toUpperCase();
})
.subscribeOn(Schedulers.single())
.observeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("d = [" + d + "]"+"d = "+ d.isDisposed());
}
@Override
public void onNext(String s) {
System.out.println("s = [" + s + "]");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
使用已添加到订阅的所有线程开关,订阅不再在主线程上运行。这也意味着没有任何东西不再停止主线程,并且您的应用程序在打印所需的数据之前退出。
出于测试目的,您可以在main()
方法的末尾添加一个Thread.sleep(1000);
(我想您已经添加了此代码(。然后,您将看到System.out.println()
语句的输出。其他解决方案是不使用subscribeOn()
或observeOn()
并保留在当前线程上。此外,您可以使用blockingSubscribe()
等待订阅完成,然后再继续主线程。