Qualcuno può spiegare la differenza tra Observable, Completable e Single in RxJava con esempi chiari?
In quale scenario usiamo uno rispetto agli altri?
Qualcuno può spiegare la differenza tra Observable, Completable e Single in RxJava con esempi chiari?
In quale scenario usiamo uno rispetto agli altri?
Risposte:
Observable
è il blocco predefinito generico di ReactiveX, dell'origine dell'evento che emette valori nel tempo. (e quindi esiste in ogni linguaggio a cui ReactiveX è esteso)
in breve Gli eventi osservabili sono:
onNext * (onCompleted | onError)? / (* zero o più? - zero o 1)
Single
e Completable
sono nuovi tipi introdotti esclusivamente su RxJava che rappresentano tipi ridotti di Observable
, che hanno API più concise.
Single
rappresentano Observable
che emettono un singolo valore o errore.
Completable
rappresentano Observable
che non emette alcun valore, ma solo eventi terminali, o onError
oonCompleted
Puoi pensare alle differenze come le differenze di un metodo che restituisce:
Collezione di oggetti - Osservabile
Oggetto singolo - Singolo
e metodo che non restituisce valori (metodo void) - Completabile.
Single
puòessere appropriato quando hai Observable orientato alle attività e ti aspetti un valore singolo, come la richiesta di rete che viene eseguita una volta e restituisce un valore (o un errore), la chiamata di rete viene gestita in una volta, il che significa che non ti aspetti che restituisca valori aggiuntivi col tempo. Un altro esempio è l'operazione di recupero dati da parte del database.
Completable
è appropriato quando hai un Observable
e non ti interessa il valore derivante dall'operazione, o non ce n'è. Ad esempio, l'aggiornamento di una cache, l'operazione può avere esito positivo o negativo, ma non esiste alcun valore.
Un altro esempio è qualche operazione di inizializzazione di lunga durata che non restituisce nulla. Può essere una chiamata di rete UPDATE / PUT che ha avuto come risultato solo l'indicazione di successo.
In ogni caso, Completable e Single non stanno aggiungendo nuove funzionalità ma stanno introducendo API più robuste e concise, che dicono di più sulle operazioni dietro l'osservabile che l'API ha esposto.
Modificare:
Maybe
:RxJava2 ha aggiunto un nuovo tipo chiamato Maybe
, Maybe
è la combinazione di Completable
e Single.
Nello stesso linguaggio come sopra, Maybe
può essere pensato come un metodo che restituisce un
Optional
certo tipo, Optional
è un wrapper attorno a Object che dice esplicitamente se abbiamo un valore in esso Object
o no (invece di null).
Con Maybe
possiamo avere un valore esattamente uguale Single
o non restituire nulla, proprio come Completable
. Inoltre, come entrambi, abbiamo l'errore.
Maybe
è utile quando vogliamo segnalare che un Observable
potrebbe non avere un valore e verrà semplicemente completato.
Un esempio potrebbe essere recuperato dalla cache, non avremo necessariamente un valore nella cache, quindi in questo caso lo completeremo, ow lo otterremo onNext
con il valore dalla cache.
Questo è anche degno di gestire valori non nulli in un flusso con RxJava2.
Flowable
:Innanzitutto, definiamo la contropressione. La contropressione è un mezzo per gestire la situazione in cui i dati vengono generati più velocemente di quanto possano essere elaborati. Flowable
ha il supporto di contropressione che consente a valle di richiedere articoli. Puoi leggere di più sulle differenze qui .
Maybe<T>
, essenzialmente Single<T?>
?
Single
di essere un Completable
con valore restituito?
Una risposta concisa l'ho trovata qui nella sezione RXJava.