订阅许多可观察对象的RxJava不会为所有订阅者触发onNext()吗?

时间:2019-04-19 10:04:45

标签: android rx-java rx-java2

当我创建5个可观察对象并通过单独的订阅者订阅它们时,凭直觉,我认为每个订阅者都将获取其onobserv()调用发出的其可观察对象的对应数据:

val compositeSubscription = CompositeDisposable()

fun test() {

        for (i in 0..5) {
            compositeSubscription.add (Observable.create<String>(object : ObservableOnSubscribe<String> {
                override fun subscribe(emitter: ObservableEmitter<String>) {
                    emitter.onNext("somestring")
                    emitter.onComplete()
                }
            }).subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                    .subscribe({
                        Logger.i("testIt onNext")
                    }, {
                        Logger.i("testIt onError")
                    }))
        }
}

但是,我看到的是日志中的一两个“ testIt onNext”。

现在,当我在订户的onNext()中添加延迟时,将调用所有6个订户的onNext()。

当某些订户的速度不足以赶上他们的数据时,这似乎是一种不道德的情况。发生这种情况的方式让我回避了,因为应该在Subscriber启动并运行后调用subscribe()。

对此表示感谢。

1 个答案:

答案 0 :(得分:2)

从此代码来看,每个订阅者都应打印“ testIt onNext”。您确定没有打印出来吗?也许Android Studio正在崩溃相同的行?您是否尝试过为每个订阅者打印不同的内容?