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?
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:
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.
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 .
Une réponse concise, j'ai trouvé ici sur la section RXJava.