Kann jemand bitte den Unterschied zwischen Observable, Completable und Single in RxJava mit klaren Beispielen erklären?
In welchem Szenario verwenden wir eines über das andere?
Kann jemand bitte den Unterschied zwischen Observable, Completable und Single in RxJava mit klaren Beispielen erklären?
In welchem Szenario verwenden wir eines über das andere?
Antworten:
Observable
ist der generische ReactiveX-Baustein der Ereignisquelle, der im Laufe der Zeit Werte ausgibt. (und existiert somit in jeder Sprache, auf die ReactiveX erweitert wurde)
in Kürze Beobachtbare Ereignisse sind:
onNext * (onCompleted | onError)? / (* null oder mehr? - null oder 1)
Single
und Completable
sind neue Typen, die exklusiv bei RxJava eingeführt wurden und reduzierte Typen von darstellen Observable
, die eine präzisere API haben.
Single
stellen dar, Observable
dass ein einzelner Wert oder Fehler ausgegeben wird.
Completable
stellen dar, Observable
dass kein Wert ausgegeben wird, sondern nur Terminalereignisse, entweder onError
oderonCompleted
Sie können sich die Unterschiede wie die Unterschiede einer Methode vorstellen, die Folgendes zurückgibt:
Sammlung von Objekten - beobachtbar
Einzelobjekt - Einzelobjekt
und Methode, die keine Werte zurückgibt (void-Methode) - Vervollständigbar.
Single
Dies kann angemessen sein, wenn Sie ein aufgabenorientiertes Observable haben und einen einzelnen Wert erwarten, z. B. eine einmal ausgeführte Netzwerkanforderung und einen Rückgabewert (oder einen Fehler). Der Netzwerkaufruf wird einmalig ausgeführt, was bedeutet, dass Sie nicht erwarten, dass er zusätzliche Werte zurückgibt im Laufe der Zeit. Ein weiteres Beispiel ist die DB-Abrufdatenoperation.
Completable
ist angemessen, wenn Sie einen haben Observable
und sich nicht um den Wert kümmern, der sich aus der Operation ergibt, oder wenn es keinen gibt. Beispiele sind beispielsweise das Aktualisieren eines Caches. Die Operation kann entweder erfolgreich sein oder fehlschlagen, es gibt jedoch keinen Wert.
Ein weiteres Beispiel ist eine lang laufende Init-Operation, die nichts zurückgibt. Es kann sich um einen UPDATE / PUT-Netzwerkanruf handeln, der nur zu einer Erfolgsanzeige führte.
In jedem Fall fügen Completable und Single keine neuen Funktionen hinzu, sondern führen robustere und präzisere APIs ein, die mehr über die Vorgänge hinter dem Observable erzählen, die die API verfügbar gemacht hat.
Bearbeiten:
Maybe
:RxJava2 hat einen neuen Typ genannt Maybe
, Maybe
ist die Kombination aus Completable
und Einzel.
In der gleichen Sprache wie oben Maybe
kann man sich eine Methode vorstellen, die Optional
einen Typ zurückgibt
. Sie Optional
ist ein Wrapper um Object, der explizit angibt, ob wir einen Wert darin haben - Object
oder nicht (anstelle von null).
Mit können Maybe
wir entweder einen Wert genau wie haben Single
oder nichts zurückgeben - genau wieCompletable
. Zusätzlich haben wir wie beide den Fehler.
Maybe
ist wertvoll, wenn wir markieren möchten, dass ein Observable
möglicherweise keinen Wert hat und nur vervollständigt wird.
Ein Beispiel würde aus dem Cache abgerufen, wir haben nicht unbedingt einen Wert im Cache, also werden wir in diesem Fall vervollständigen, wie wir onNext
mit dem Wert aus dem Cache erhalten.
Dies ist auch sinnvoll, um Nicht-Null-Werte in einem Stream mit RxJava2 zu verarbeiten.
Flowable
:Definieren wir zunächst den Gegendruck. Gegendruck ist ein Mittel, um die Situation zu bewältigen, in der Daten schneller generiert werden, als sie verarbeitet werden können. Flowable
Unterstützt den Gegendruck, sodass nachgeschaltete Artikel angefordert werden können. Sie können mehr über die Unterschiede lesen hier .
Maybe<T>
im Wesentlichen Single<T?>
?
Single
, ein Completable
Wert mit zurückgegebenem Wert zu sein?
Eine kurze Antwort, die ich hier im Abschnitt RXJava gefunden habe.