2016-03-30 19 views

risposta

7

creare (. ..) crea immediatamente Osservabile.

public final static <T> Observable<T> create(OnSubscribe<T> f) { 
     return new Observable<T>(hook.onCreate(f)); 
    } 

rinviare (...) riconosce la funzione factory che restituisce osservabile (Soggetto, ecc ...), avvolge con OnSubscribeDefer e crea osservabile solo quando sottoscrive abbonato, nuova osservabili per ogni utente.

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) { 
    return create(new OnSubscribeDefer<T>(observableFactory)); 
} 

Vedi qualche dettaglio in più here

7

Così la distinzione sembra essere: defer è buono quando si ha qualcosa che crea/restituisce un osservabile già, ma non vogliono che questo processo accada fino all'abbonamento.

create è buono quando è necessario avvolgere manualmente un processo asincrono e creare un osservabile. Tale creazione è anche differita fino all'abbonamento.

Per dirla in altro modo:

defer è un operatore che permette composizione differita delle sequenze osservabili.

create è un'implementazione personalizzata di sequenza osservabile (in cui la creazione viene differita fino alla sottoscrizione).

Quindi, se si dispone di una situazione in cui è possibile utilizzare per creare un justObservable da alcuni risultati/valore o si dispone di un livello di API di rete che restituisce un Observable della richiesta, ma non si vuole che la richiesta per dare il via fino all'abbonamento. defer andrebbe bene per quegli scenari.

Se si dispone di un livello di rete API non ritorno un Observable per una richiesta, ma che è necessario un'interfaccia Observable a, si potrebbe utilizzare create. Tuttavia, la sequenza Observable non verrà creata fino all'abbonamento. Se si desidera che la chiamata di rete si avvii indipendentemente dall'abbonamento, si utilizzerà un meccanismo diverso, ad esempio Subject, potenzialmente riprodotto.

Problemi correlati