Quelqu'un peut-il expliquer la différence entre Observable, Completable et Single dans RxJava avec des exemples clairs?
Dans quel scénario utilisons-nous l'un sur les autres?
Quelqu'un peut-il expliquer la différence entre Observable, Completable et Single dans RxJava avec des exemples clairs?
Dans quel scénario utilisons-nous l'un sur les autres?
Réponses:
Observable
est le bloc de construction générique ReactiveX, de la source d'événements qui émet des valeurs au fil du temps. (et existe donc dans toutes les langues auxquelles ReactiveX a été é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 introduits exclusivement chez RxJava qui représentent des types réduits de Observable
, qui ont une API plus concise.
Single
représentent Observable
qui émettent une valeur ou une erreur unique.
Completable
représentent Observable
qui n'émet aucune valeur, mais uniquement des événements terminaux, soit onError
ouonCompleted
Vous pouvez penser aux différences comme aux 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) - Complétable.
Single
peut être approprié lorsque vous avez Observable orienté tâche et que vous attendez une valeur unique, comme une requête réseau qui est effectuée une fois et une valeur renvoyée (ou une erreur), l'appel réseau est exécuté en une seule fois, ce qui signifie que vous ne vous attendez pas à ce qu'il renvoie des valeurs supplémentaires heures supplémentaires. Un autre exemple est l'opération de récupération de données DB.
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 sont la mise à jour d'un cache par exemple, l'opération peut réussir / échouer, mais il n'y a aucune valeur.
Un autre exemple est une opération d'initialisation de longue durée qui ne renvoie rien. Il peut s'agir d'un appel réseau UPDATE / PUT qui n'a abouti qu'à une indication de succès.
Dans tous les cas, Completable et Single n'ajoutent pas de nouvelles fonctionnalités mais introduisent des API plus robustes et concises, qui en disent plus sur les opérations derrière l'Observable que l'API a exposées.
Éditer:
Maybe
:RxJava2 a ajouté un nouveau type appelé Maybe
, Maybe
est la combinaison de Completable
et Single.
Dans le même langage que ci-dessus, Maybe
peut être considéré comme une méthode qui retourne un
Optional
certain type, Optional
est un wrapper autour de Object qui indique explicitement si nous avons une valeur dedans - Object
ou non (au lieu de null).
Avec Maybe
nous pouvons soit avoir une valeur exactement comme, Single
soit 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
peut ne pas avoir de valeur et se terminera simplement.
Un exemple serait extrait du cache, nous n'aurons pas nécessairement une valeur dans le cache, donc dans ce cas, nous allons compléter, comment nous obtiendrons onNext
la valeur du cache.
Cela vaut également la peine de gérer des valeurs non nulles dans un flux avec 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'elles ne peuvent être traitées. Flowable
a un support de contre-pression permettant en aval de demander des articles. Vous pouvez en savoir plus sur les différences ici .
Maybe<T>
-ce essentiellement Single<T?>
?
Single
comme un Completable
avec une valeur retournée?
Une réponse concise que j'ai trouvée ici dans la section RXJava.