java rx中Observable.defer和Observable.create之间的区别

有人可以解释我在Observable defercreate方法之间的区别吗? 我无法理解何时应该使用defer ,何时应该使用create ..

参考文献:

推迟: http : //reactivex.io/documentation/operators/defer.html

创建: http : //reactivex.io/documentation/operators/create.html

谢谢

所以区别似乎是:当你有一些创建/返回一个observable的东西时, defer很好,但是你不希望它在订阅之前发生。

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

换一种方式:

defer是一个允许可观察序列的延迟组合的运算符。

create是可观察序列的自定义实现(其中创建延迟到订阅之前)。

因此,如果您有一种情况,您可能just使用从某些结果/值创建Observable ,或者您有一个返回请求的Observable的网络API层,但您不希望该请求在订阅之前启动。 defer对这些情况有好处。

如果您的网络API层没有为请求返回Observable ,但您需要一个Observable接口,则可以使用create 。 但是,在订阅之前,仍然不会创建Observable序列。 如果您希望该网络呼叫无论订阅如何开始,那么您将使用不同的机制,如Subject ,可能会重放。

create(…)实际上立即创建了Observable。

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

defer(…)接受返回Observable(Subject,etc …)的Factory函数,用OnSubscribeDefer包装它并仅在订阅者订阅时创建Observable,为每个订阅者创建新的Observable。

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

在这里查看更多细节