Rx java 如何订阅多个订阅者的Observable或Flowable?

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

在Hello World示例中,有一个订户

   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()
?这是任何可观察到的预期行为吗?或者支持多个订阅者是可选功能?应如何记录?