2016-03-30 2 views

Antwort

7

erstellen (. ..) erstellt tatsächlich Observable sofort.

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

defer (...) übernimmt Werksfunktion, die beobachtbare zurück (Subject, etc ...), wickelt es mit OnSubscribeDefer und beobachtbare schafft nur, wenn Teilnehmer abonniert, neue Observable für jeden Teilnehmer.

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

Sehen Sie einige weitere Details here

7

So ist die Unterscheidung zu sein scheint: defer ist gut, wenn Sie etwas, das/gibt eine beobachtbare schafft bereits, aber Sie wollen es nicht zu diesem Prozess geschehen bis zum Abonnement.

create ist gut, wenn Sie einen asynchronen Prozess manuell umbrechen und eine Observable erstellen müssen. Diese Schöpfung ist auch bis zum Abonnement zurückgestellt.

Um es anders auszudrücken:

defer ist ein Operator, der latente Zusammensetzung von beobachtbaren Sequenzen ermöglicht.

create ist eine benutzerdefinierte Implementierung der beobachtbaren Sequenz (wobei die Erstellung bis zur Subskription aufgeschoben wird).

Also, wenn Sie eine Situation, wo Sie just verwenden könnten ein Observable von einigen Ergebnissen/Wert zu schaffen, oder Sie haben eine Netzwerk-API-Schicht, die ein Observable der Anforderung zurück, aber Sie wollen nicht, dass Anforderung ab Kick bis zum Abonnement. defer wäre für diese Szenarien gut.

Wenn Sie ein Netzwerk-API-Schicht haben, dass nicht Rückkehr ein Observable für eine Anforderung, die aber Sie brauchen eine Observable-Schnittstelle, können Sie create verwenden. Diese Observable Sequenz würde immer noch nicht bis zum Abonnement erstellt werden. Wenn Sie möchten, dass der Netzwerkanruf unabhängig vom Abonnement gestartet wird, verwenden Sie einen anderen Mechanismus, z. B. Subject, der möglicherweise wiederholt wird.

Verwandte Themen