为什么RxJava2不向线程发送数据?

问题描述 投票:0回答:1

我已经阅读了RxJava的文档,并尝试下面的演示:输出是 d = [0]d = false

我想知道原因:为什么数据不发出去?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() {

                    }
                });
java rx-java rx-java2
1个回答
1
投票

你在订阅中添加了所有的线程开关,你的订阅已经不在主线程上运行了。这也意味着没有任何东西能阻止主线程的运行,你的应用程序在打印你想要的数据之前就已经退出了。

为了测试的目的,你可以在主线程上添加一个 Thread.sleep(1000); 到头来 main() 方法(我想你已经在那里添加了这段代码)。然后你会看到从 System.out.println() 语句。其他解决方案是不使用 subscribeOn()observeOn() 并停留在当前的主题上。此外,您还可以使用 blockingSubscribe() 以待订阅结束后再继续主线。

© www.soinside.com 2019 - 2024. All rights reserved.