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:
Observableest 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)
Singleet Completablesont de nouveaux types introduits exclusivement chez RxJava qui représentent des types réduits de Observable, qui ont une API plus concise.
Singlereprésentent Observablequi émettent une valeur ou une erreur unique.
Completablereprésentent Observablequi n'émet aucune valeur, mais uniquement des événements terminaux, soit onErrorouonCompleted
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.
Singlepeut ê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.
Completableest approprié lorsque vous avez un Observableet 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, Maybeest la combinaison de Completableet Single.
Dans le même langage que ci-dessus, Maybepeut être considéré comme une méthode qui retourne un
Optionalcertain type, Optionalest un wrapper autour de Object qui indique explicitement si nous avons une valeur dedans - Objectou non (au lieu de null).
Avec Maybenous pouvons soit avoir une valeur exactement comme, Singlesoit ne rien renvoyer - tout comme Completable. De plus, comme les deux, nous avons l'erreur.
Maybeest utile lorsque nous voulons marquer qu'un Observablepeut 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 onNextla 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. Flowablea 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?>?
Singlecomme un Completableavec une valeur retournée?
Une réponse concise que j'ai trouvée ici dans la section RXJava.