web-dev-qa-db-fra.com

Quelle est la différence entre Observable, Completable et Single dans RxJava

Quelqu'un peut-il s'il vous plaît 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?

86
Raja Jawahar

Observable est le bloc de construction générique de ReactiveX, une source d'événements qui émet des valeurs au fil du temps. (et existe donc dans toutes les langues de ReactiveX étendu à)
En résumé, les événements observables sont:
onNext * (onCompleted | onError)?/(* zéro ou plus? - zéro ou 1)

Single et Completable sont de nouveaux types introduits exclusivement dans RxJava qui représentent des types réduits de Observable, qui sont plus concis. API.

Single représente Observable qui émet une valeur unique ou une erreur.

Completable représente Observable qui n'émet aucune valeur, mais uniquement 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 - Observable

  • Objet unique - Unique

  • et méthode qui ne renvoie aucune valeur (méthode void) - Completable.

Single peut être approprié lorsque vous avez Observable orienté tâche et que vous attendez une valeur unique, telle qu'une requête réseau exécutée une fois et une valeur renvoyée (ou une erreur), l'appel réseau est exploité de manière ponctuelle, ce qui signifie que vous ne l'utilisez pas. attendez-vous à renvoyer des valeurs supplémentaires au fil du temps. Un autre exemple est l'opération d'extraction de données dans la base de données.

Completable est approprié lorsque vous avez un Observable et que vous ne vous souciez pas de la valeur résultant de l'opération ou qu'il n'y en a pas. Les exemples mettent à jour un cache par exemple, l'opération peut soit réussir/échouer, mais il n'y a pas de valeur.
Un autre exemple est une opération init de longue durée qui ne renvoie rien. Il peut s’agir d’un appel réseau UPDATE/PUT résultant d’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 plus concises, qui en disent plus sur les opérations derrière l’observable exposées par l’API.

Modifier:

RxJava2 Maybe:

RxJava2 a ajouté un nouveau type appelé Maybe, Maybe est la combinaison de Completable et de Single.

Dans le même langage que ci-dessus, Maybe peut être considéré comme une méthode qui renvoie Optional de quelque type que ce soit, Optional est un wrapper autour de Object qui indique explicitement si nous en avons ou non. valeur en elle - Object ou non (au lieu de null).
Avec Maybe, nous pouvons avoir une valeur identique à Single ou ne rien renvoyer, tout comme Completable. De plus, comme les deux, nous avons l'erreur.
Maybe est utile lorsque nous voulons marquer qu’un Observable n’a peut-être pas de valeur et s’achève.
Un exemple serait extrait du cache, nous n’aurons pas nécessairement de valeur dans le cache, donc dans ce cas, nous allons terminer, o.w. nous aurons onNext avec la valeur du cache.
Ceci est également digne de gérer des valeurs non NULL dans un flux avec RxJava2.

RxJava2 Flowable:

Premièrement, définissons la contrepression. La contre-pression est un moyen de gérer la situation dans laquelle les données sont générées plus rapidement qu’elles ne peuvent être traitées. Flowable dispose d'une prise en charge de la contre-pression permettant à l'aval de demander des éléments. Vous pouvez en savoir plus sur les différences ici .

210
yosriz
  1. Fluide et Observable peut représenter des flux finis ou infinis. Support fluide contre-pression.
  2. Single sont des flux avec un seul élément.
  3. Peut-être que est un flux comportant 0 ou un élément.
  4. Enfin, un objet Completable représente un flux sans élément, c’est-à-dire qu’il ne peut se terminer sans valeur ou échouer.

Une réponse concise, j'ai trouvé ici sur la section RXJava.

9
Charith