143 votes

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 on utilise l'un sur les autres?

302voto

yosriz Points 6939

Observable est le générique ReactiveX bloc de construction, de la source de l'événement qui émet des valeurs dans le temps. (et donc existe dans toutes les langues ReactiveX étendu à d')
en bref é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 d' Observable, qui ont plus concise de l'API.

Single représentent Observable qui émettent de la valeur unique ou d'erreur.

Completable représentent Observable qui n'émet pas de valeur, mais seulement terminal événements, onError ou onCompleted

Vous pouvez considérer les différences comme les différences d'une méthode qui retourne:

  • Collection d'Objets Observables

  • Objet unique - Unique

  • et la méthode qui ne retourne pas de valeurs (méthode void) - Complétées.

Single peut être approprié lorsque vous avez une tâche orientée Observables et vous vous attendez à valeur unique, comme la demande de Réseau qui est effectuée une fois et la valeur de retour (ou une erreur), à l'appel du réseau est exploité dans un mode du temps, ce qui signifie que vous ne vous attendez pas à retourner des valeurs supplémentaires au fil du temps. Un autre exemple est DB extraire des données à l'opération.

Completableest appropriée que lorsque vous avez un Observable et vous n'avez pas de soins sur la valeur résulte de l'opération, ou il n'est pas tout. Des exemples sont mise à jour d'un cache par exemple, l'opération peut réussissent/échec, mais il n'y a pas de valeur.
Un autre exemple est une longue course init opération qui ne retourne rien. Elle peut être mise à JOUR/MISES réseau d'appel qui a abouti avec succès indicatif.

En tout cas, Complétées et Unique ne sont pas en ajoutant de nouvelles fonctionnalités, mais ils sont en train d'introduire plus robuste et concis Api, qui en dit plus sur les opérations derrière les Observables que l'API exposées.

Edit:

RxJava2 Maybe:

RxJava2 ajout d'un nouveau type appelé Maybe, Maybe est la combinaison de l' Completable et Unique.

Dans la même langue, comme ci-dessus, Maybe peut être considéré comme une méthode qui retourne Optional , Optional est un wrapper autour de l'Objet qui indique explicitement que nous avons une certaine valeur en elle - Object ou pas (au lieu de null).
Avec Maybe on peut soit avoir une certaine valeur exactement comme Single ou renvoyer rien - juste comme Completable. En outre, comme les deux, nous avons l'erreur.
Maybe est utile lorsque l'on veut marquer qu'un Observable peut ne pas avoir de valeur, et s'il suffit de compléter.
Un exemple pourrait être récupérée à partir de la mémoire cache, nous allons nous ont pas nécessairement une valeur dans le cache, donc dans ce cas, nous permettra de compléter, de l'o.w. nous aurons, onNext de la valeur de la cache.
C'est également digne de gérer les valeurs non null dans un ruisseau avec RxJava2.

RxJava2 Flowable:

Tout 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'il peut être traité. Flowable a contre-pression permettant, en aval, à des éléments de demande. Vous pouvez lire plus sur les différences ici.

25voto

Charith Points 427
  1. Fluide et Observables peuvent représenter fini ou infini de ruisseaux. Suspension support de contre-pression.
  2. Unique sont des cours d'eau avec un seul élément.
  3. Peut-être sont des cours d'eau avec 0 ou un élément.
  4. Enfin un Complétées représente un flux sans éléments, j'.e il ne peut pas complet sans valeur ou à l'échec.

Un concis réponse que j'ai trouvé ici sur RXJava section.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X