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

Xit*_*rum 25 java reactivex

有人能解释一下defercreate方法之间的区别Observable吗?我不知道什么时候应该使用defer,什么时候应该使用create..

参考文献:

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

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

谢谢

Bob*_*ryn 21

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

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

换一种方式:

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

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

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

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


小智 13

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

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

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

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {
    return create(new OnSubscribeDefer<T>(observableFactory));
}
Run Code Online (Sandbox Code Playgroud)

在这里查看更多细节