share()和publish()。autoConnect()之间的区别是什么?

时间:2016-11-07 13:50:34

标签: rx-java

根据我的观点。我认为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

1 个答案:

答案 0 :(得分:12)

它们的不同之处在于,当订阅​​者取消订阅share时,上游断开连接,当新订阅者订阅时,上游源会重新订阅并从头开始(如果冷)。

autoConnect等待指定数量的订阅者,连接一次,并且在所有订阅者取消订阅时永远不会断开连接。这是关于它如何运作的description