2016-11-07 54 views
2

根據我view.I點認爲share()publish().autoConnect()。但同樣在這段代碼的結果是不一樣的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 

在這種情況下,我們不能使用share()在rx-jav中進行多播一個?我找到conclusion但不適合這種情況。

測試環境:預言jdk1.8 RX-java的1.2 IDEA的ubuntu

回答

8

它們是在不同的時用戶從share退訂,上游被斷開,並且當新的訂閱者訂閱,上游源被重新認購併從頭開始(如果冷的話)。

autoConnect等待指定數量的訂戶,連接一次,並且在所有訂戶取消訂閱時不會斷開連接。以下是關於它如何工作的description

+0

所以'share'可以用於'Multicasting'。在這種情況下,爲什麼我們需要'share'和'publish()。RefCount()'。我是RxJava的初學者。 – ilumer

+1

如果由於某種原因用戶數量變爲1 - 0 - 1,您可以同時使用多播,但'share'可以重新訂閱源。 – akarnokd

+0

但是從我的代碼,爲什麼subscriber2無法接收event.if'share'可以用於'Multicasting',subscriber2應該接收事件。 – ilumer

相關問題