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?

58
demandé sur Jim Baca 2017-03-13 09:50:31

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.

Completableest 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 .

147
répondu yosriz 2018-07-04 08:16:14
  1. Fluide et Observable peut représenter fini ou infini de ruisseaux. Support fluide contre-pression .
  2. Single sont des flux avec un seul élément.
  3. peut-être que sont des flux avec 0 ou un élément.
  4. 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.

4
répondu Charith 2018-06-04 05:50:29