Quelle est la différence entre Observable, Completable et Single dans RxJava
Quelqu'un peut-il expliquer la différence entre Observable, Completable et Single dans RxJava avec des exemples clairs?
Dans quel scénario nous utilisons un sur les autres?
2 réponses
Observable
est le bloc de construction ReactiveX générique, de la source d'événement qui émet des valeurs au fil du temps. (et existe donc dans toutes les langues ReactiveX étendu à)
en bref, les événements observables sont:
onNext* (onCompleted | onError)? /(* zéro ou plus ? - zéro ou 1)
Single
et Completable
sont de nouveaux types introduites exclusivement à RxJava qui représentent réduit types de Observable
, qui ont plus concise de l'API.
Single
représentent {[0] } qui émettent une valeur unique ou erreur.
Completable
représente Observable
qui n'émet aucune valeur, mais seulement des événements terminaux, soit onError
ou onCompleted
Vous pouvez penser aux différences comme les différences d'une méthode qui renvoie:
Collection d'Objets Observables
Objet Unique - Unique
Et méthode qui ne renvoie aucune valeur (méthode void) - Completable.
Single
peut être approprié lorsque vous avez orienté tâche Observable et vous attendez-vous à une valeur unique, comme la requête réseau qui est effectuée une fois et la valeur de retour (Ou erreur), l'appel réseau est exploité en une seule fois, ce qui signifie que vous ne vous attendez pas à ce qu'il retourne des valeurs supplémentaires au fil du temps. Un autre exemple est L'opération DB fetch data.
Completable
est approprié lorsque vous avez un Observable
et que vous ne vous souciez pas de la valeur résultante de l'opération, OU qu'il n'y en a pas.
Les exemples sont la mise à jour d'un cache par exemple, l'opération peut réussir/échouer, mais il n'y a pas de valeur.
Un autre exemple est une opération d'initialisation longue qui ne retourne rien. Il peut S'agir D'un appel réseau de mise à jour/mise à jour qui a donné lieu à une indication de succès uniquement.
Dans tous les cas, Completable et Single n'ajoutent pas de nouvelles fonctionnalités, mais ils introduisent des API plus robustes et concises, qui en disent plus sur les opérations derrière L'Observable que l'API a exposé.
Modifier:
RxJava2 Maybe
:
RxJava2 a ajouté un nouveau type appelé Maybe
, Maybe
est la combinaison de Completable
et Unique.
Dans la même langue que ci-dessus, Maybe
peut être considéré comme une méthode qui renvoie
Optional
d'un certain type, Optional
est un wrapper autour de L'objet qui indique explicitement si nous avons une certaine valeur - Object
ou non (au lieu de null).
Avec Maybe
, nous pouvons soit avoir une valeur exactement comme Single
ou n'avoir rien de retour - tout comme Completable
. De plus, comme les deux, nous avons l'erreur.Maybe
est précieux quand nous voulons marquer qu'un Observable
pourrait ne pas avoir de valeur et se terminera simplement.
Un exemple serait récupéré à partir du cache, nous n'aurons pas nécessairement une valeur dans le cache, donc dans ce cas, nous allons compléter, O. W. nous obtiendrons onNext
avec la valeur du cache.
Ceci est également digne de gérer des valeurs non nulles dans un flux avec RxJava2.
RxJava2 Flowable
:
D'abord, définissons la contre-pression. La contre pression est un moyen de gérer la situation où les données sont générées plus rapidement qu'elles ne peuvent l'être transformés. {[27] } a un support de contre-pression permettant à l'aval de demander des articles. Vous pouvez en savoir plus sur les différences ici .
- Fluide et Observable peut représenter fini ou infini de ruisseaux. Support fluide contre-pression .
- Single sont des flux avec un seul élément.
- peut-être que sont des flux avec 0 ou un élément.
- enfin unCompletable représente un flux sans éléments, c'est-à-dire ne peut se terminer sans valeur ou échouer.
Une réponse concise que j'ai trouvée ici sur la section RXJava.