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 nous utilisons l’un sur les autres?
Observable
est le bloc de construction générique ReactiveX, de la source d’événement qui émet des valeurs au fil du temps. (et existe donc dans tous les langages de ReactiveX)
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 à RxJava, qui représentent des types d’ Observable
réduits, dotés d’une API plus concise.
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, onError
ou onCompleted
Vous pouvez penser aux différences comme les différences d’une méthode qui renvoie:
Collection d’objects – Observable
Objet unique – Single
et méthode qui ne renvoie aucune valeur (méthode void) – Completable.
Single
peut être approprié lorsque vous avez une tâche orientable Observable et que vous attendez une valeur unique, comme une requête réseau qui est effectuée une seule fois et une valeur de retour (ou une erreur), l’appel réseau est exécuté en une seule fois. valeurs au fil du temps. Un autre exemple est l’opération Data Fetch Data.
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 réussir ou échouer, mais il n’y a aucune valeur.
Un autre exemple est une opération d’initialisation longue qui ne renvoie rien. Il peut s’agir d’un appel réseau UPDATE / PUT ayant uniquement donné une indication de réussite.
Dans tous les cas, Completable et Single n’ajoutent pas de nouvelles fonctionnalités, mais ils 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.
Modifier:
Maybe
– 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 Optional
un type quelconque de Optional
, Optional
est un wrapper autour de Object qui indique explicitement si nous avons une valeur – Object
ou non (au lieu de null).
Avec Maybe
nous pouvons avoir une valeur exactement comme Single
ou ne rien retourner – comme Completable
. De plus, comme les deux, nous avons l’erreur.
Maybe
– Maybe
est-il utile quand nous voulons marquer qu’un Observable
peut ne pas avoir de valeur et qu’il ne fera que terminer.
Un exemple serait extrait du cache, nous n’aurions pas nécessairement une valeur dans le cache, donc dans ce cas, nous allons terminer, donc nous allons obtenir onNext
avec la valeur du cache.
Cela vaut également la peine de gérer des valeurs non nulles dans un stream avec RxJava2.
Tout d’abord, définissons la contre-pression. 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 a un support de contre-pression permettant à l’aval de demander des éléments. Vous pouvez en savoir plus sur les différences ici .
Une réponse concise que j’ai trouvée ici sur la section RXJava.