2016-06-01 3 views
1

Observable.publish() und Observable.replay() gibt ConnectableObservable zurück. Wenn diese Methode jedoch die Schnittstelle als Parameter verwendet (wie Observable.publish(Func1) und Observable.replay(Func1)), würden sie Observable zurückgeben.Warum geben Observable.publish (Func1) und Observable.replay (Func1) Observable zurück?

Warum geben sie Observable statt ConnecatbleObservable zurück?

Wenn ich diese Methoden mit einem Parameter verwendet, würde ich Observable bekommen. Und dann rief ich submit(Observer) zum Observablen, das Observable würde anfangen zu arbeiten. Ich konnte connect() nicht aufrufen, da das Observable Observable, nicht Connected Observable sein könnte.

Wenn ich Observable.publish(Func1) und Observable.replay(Func1) zu ConnectableObservable verwenden muss, denke ich, dass diese Methoden in ConnectableObservable, nicht in Observable sein müssen.

Warum sind sie Observable Methoden, aber nicht ConnectableObservable Methoden?

Antwort

2

Diese Operatoren teilen sich die Quelle für die Dauer des Funktionsaufrufs, dh Sie können das für Ihre Funktion bereitgestellte Observable abonnieren und Operatoren anwenden, wie Sie es für richtig halten. Diese werden nicht mehrere Abonnements für die ursprüngliche Quelle auslösen. aber es passiert für jeden Abonnenten das Ergebnis des Betreibers individuell. Daher löst das Abonnement selbst die Verbindung zum Upstream aus, und es ist nicht notwendig, dies manuell über eine ConnectableObservable zu tun.

Zum Beispiel:

Observable.range(1, 10) 
.doOnSubscribe(() -> System.out.println("Subscribed!")) 
.publish(o -> Observable.zip(o, o.skip(1), (a, b) -> a + b)) 
.subscribe(System.out::println); 

gegen

Observable<Integer> o = Observable.range(1, 10) 
.doOnSubscribe(() -> System.out.println("Subscribed!")); 

Observable.zip(o, o.skip(1), (a, b) -> a + b) 
.subscribe(System.out::println); 
+0

Danke. Jetzt verstehe ich den Grund und den Nutzen. Aber ich bin total verwirrt mit der JavaDocs Erklärung. Trifft diese Methode etwas mit ConnectableObservable? Aber das ist anders als das Thema der Frage. Ich denke vielleicht eine Weile darüber nach und stelle die Frage, wenn ich die Antwort nicht erreichen konnte. Übrigens bin ich froh, dass Sie der Hauptdarsteller geworden sind. Herzliche Glückwünsche! – otal

0

Ich bemerkte, dass diese Methoden das ursprüngliche ConnecableObservable zum Emittieren von Originalwerten verwendeten, aber diese Methoden machten das zurückgegebene Observable zum Ausgeben der konvertierten Werte. Und wenn Benutzer wollten, dass nur die bestimmten Observer den konvertierten Wert erhalten, ist es sinnvoll.

Aber ich frage mich immer noch, warum diese Methoden nicht in ConnectableObservable sind.

Verwandte Themen