根据我的观点,我认为share()
与publish().autoConnect()
相同,但是在此代码中结果并不相同
Observable<Integer> cold = Observable.create(subscriber -> {
for (int i = 0; i <= 2; i++) {
System.out.println("Hot Observable Emit " + i);
subscriber.onNext(i);
}
});
ConnectableObservable<Integer> connectble = cold.publish().autoConnect(2);
//Obserable(Integer) connectavle = cold.share();
connectble.subscribe(subscriber1);
connectble.subscribe(subscriber2);
publish(). autoConnect() output
Hot Observable Emit 0
Subscriber 1 : 0
Subscriber 2 : 0
....
share() output
Hot Observable Emit 0
Subscriber 1 : 0
//the subscriber2 not receive event
在这种情况下,我们不能在Rx-java中使用
share()
进行多播吗?我找到了conclusion,但不适合这种情况。测试环境:oracle jdk1.8 rx-java 1.2 IDEA ubuntu
最佳答案
它们的不同之处在于,当订阅者取消订阅share
时,上游断开连接,而新订阅者订阅时,上游源被重新订阅并从头开始(如果冷)。autoConnect
等待指定数量的订户,连接一次,并且在所有订户退订时永远不会断开连接。这是有关其工作方式的description。