2016-03-30 56 views

回答

7

创建(。 ..)实际上创建Observable立即。

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

延迟(...)接受工厂函数,返回可观察(主题,等...),与OnSubscribeDefer包装它,并创建可观察到,只有当用户订阅,新观测到每个用户。

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

看到更多细节here

7

所以区别似乎是:defer是好,当你有一些创建/返回一个可观察的了,但你不希望它这个过程发生直到订阅。

create当你需要手动包装一个异步进程并创建一个observable时是很好的。该创建是也推迟到订阅

换一种方式:

defer是一个操作符,使观察序列的延迟组合物。

create是可观察序列的自定义实现(创建延迟到订阅的地方)。

所以,如果你有一个情况下,你可能会使用just创建一些结果/值Observable或者你有一个返回的请求的Observable网络API层,但你不希望这一请求揭开序幕直到订阅。 defer对于这些场景会很好。

如果你有一个网络API层,返回Observable的要求,但你需要一个Observable界面,你可以使用create。该Observable序列仍然不会被创建,直到订阅虽然。如果您希望网络电话不管订阅而启动,那么您将使用不同的机制,如Subject,这可能是重播。

相关问题