Dies ist eine absolut gültige Frage und hätte nicht geschlossen werden dürfen. Obwohl rx eine großartige Bibliothek ist, sind die Dokumentation und Beispiele leider extrem schlecht und verwirrend.
RunLoop
Antworten:
246
Observableist 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)
Singleund Completablesind neue Typen, die exklusiv bei RxJava eingeführt wurden und reduzierte Typen von darstellen Observable, die eine präzisere API haben.
Singlestellen dar, Observabledass ein einzelner Wert oder Fehler ausgegeben wird.
Completablestellen dar, Observabledass kein Wert ausgegeben wird, sondern nur Terminalereignisse, entweder onErroroderonCompleted
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.
SingleDies 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.
Completableist angemessen, wenn Sie einen haben Observableund 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:
RxJava2 Maybe:
RxJava2 hat einen neuen Typ genannt Maybe, Maybeist die Kombination aus Completableund Einzel.
In der gleichen Sprache wie oben Maybekann man sich eine Methode vorstellen, die Optionaleinen Typ zurückgibt
. Sie Optionalist ein Wrapper um Object, der explizit angibt, ob wir einen Wert darin haben - Objectoder nicht (anstelle von null).
Mit können Maybewir entweder einen Wert genau wie haben Singleoder nichts zurückgeben - genau wieCompletable . Zusätzlich haben wir wie beide den Fehler. Maybeist wertvoll, wenn wir markieren möchten, dass ein Observablemö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 onNextmit dem Wert aus dem Cache erhalten.
Dies ist auch sinnvoll, um Nicht-Null-Werte in einem Stream mit RxJava2 zu verarbeiten.
RxJava2 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. FlowableUnterstützt den Gegendruck, sodass nachgeschaltete Artikel angefordert werden können. Sie können mehr über die Unterschiede lesen hier .
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
undCompletable
sind neue Typen, die exklusiv bei RxJava eingeführt wurden und reduzierte Typen von darstellenObservable
, 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, entwederonError
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 habenObservable
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:
RxJava2
Maybe
:RxJava2 hat einen neuen Typ genannt
Maybe
,Maybe
ist die Kombination ausCompletable
und Einzel.In der gleichen Sprache wie oben
Maybe
kann man sich eine Methode vorstellen, dieOptional
einen Typ zurückgibt . SieOptional
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 habenSingle
oder nichts zurückgeben - genau wieCompletable
. Zusätzlich haben wir wie beide den Fehler.Maybe
ist wertvoll, wenn wir markieren möchten, dass einObservable
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.
RxJava2
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 .quelle
Maybe<T>
im WesentlichenSingle<T?>
?Single
, einCompletable
Wert mit zurückgegebenem Wert zu sein?Eine kurze Antwort, die ich hier im Abschnitt RXJava gefunden habe.
quelle