Rx java 如何订阅多个订阅者的Observable或Flowable?
在Hello World示例中,有一个订户Rx java 如何订阅多个订阅者的Observable或Flowable?,rx-java,rx-java2,Rx Java,Rx Java2,在Hello World示例中,有一个订户 public static void main(String[] args) { Flowable.just("Hello world").subscribe(System.out::println); } 如何制作两个或多个组件?您可以为任何可观察/可流动组件订阅多个子组件。只要重复subscribe呼叫您需要的次数即可 Flowable<String> source = Flowable.just("Hello
public static void main(String[] args) {
Flowable.just("Hello world").subscribe(System.out::println);
}
如何制作两个或多个组件?您可以为任何可观察/可流动组件订阅多个子组件。只要重复
subscribe
呼叫您需要的次数即可
Flowable<String> source = Flowable.just("Hello world");
source.subscribe(System.out::println);
source.subscribe(System.out::println);
...
Flowable source=Flowable.just(“你好世界”);
source.subscribe(System.out::println);
source.subscribe(System.out::println);
...
热观测值和冷观测值在处理多个订阅的方式上存在差异
冷可观测物/流动物为每个新订户重新请求来源的物品。例如,Flowable.fromCallable(c)
将在每次订阅时调用c
Hot Observable/flowables与所有订阅者共享相同的源订阅,即它们不会为每个新订阅者从源请求新项目。新项目会传播到所有当前订阅的订户。我不知道为什么。但是如果我把onClick包装成Observable,我需要一个share()操作符。否则,只有一个用户将获得呼叫。@Phoenix Wang这取决于您如何包装呼叫。不查代码就说不出来。尝试将其作为新问题发布在SO.Thx上。我想我明白了。我用create-like:Observable.create(e->btn.setOnClickListener(v->e.onNext(“”))尝试了RxBinding和normalwrap;它们的工作原理相同。只有最后一个用户才能接收呼叫。我读了Observable的源代码。因此,基本上在Observable中,由于subscribeActual()方法的实现,一次只能有一个Observable接收onNext调用。@PhoenixWang当使用cold Observable(例如
Observable.create
)时,您为每个新订户调用btn.setOnClickListener
。如果btn.setOnClickListener
删除以前设置的侦听器,则以前的订阅者将不会接收消息。如果有,请尝试使用btn.addOnClickListener
。对此仍不完全清楚。似乎一个可观察的用户(尤其是热门用户)必须维护一个当前订户列表才能处理多个订阅。是吗?当它想要发出一个项目(或一个错误或一个完成)时,它不是必须遍历所有订阅者并调用每个订阅者的onNext()
?这是任何可观察到的预期行为吗?或者支持多个订阅者是可选功能?应如何记录?