gpt4 book ai didi

rx-java - 观察者一次性

转载 作者:行者123 更新时间:2023-12-04 17:44:18 24 4
gpt4 key购买 nike

在 RxJava 1 中,使用 Observer 订阅会返回一个可以取消订阅的订阅。

在 RxJava 2 中,使用 Observer 订阅会返回 void 并且没有 Disposeable。怎么可能停止那个“订阅”?

// v1
rx.Observable<Long> v1hot = rx.Observable.interval(1, TimeUnit.SECONDS);
rx.Observer<Long> v1observer = new TestSubscriber<>();
Subscription subscription = v1hot.subscribe(v1observer);
subscription.unsubscribe();

// v2
Observable<Long> v2hot = Observable.interval(1, TimeUnit.SECONDS);
Observer<Long> v2Observer = new TestObserver<>();
v2hot.subscribe(v2Observer); // void

编辑 : 如何处理这种情况,我们使用一个本身没有实现 Disposable 的观察者,如 BehaviorSubject ?就像在这个例子中一样:

// v1
rx.Observable<Long> v1hot = rx.Observable.interval(1, TimeUnit.SECONDS);
rx.Observer<Long> v1observer = rx.subjects.BehaviorSubject.create();
Subscription subscription = v1hot.subscribe(v1observer);
subscription.unsubscribe();

// v2
Observable<Long> v2hot = Observable.interval(1, TimeUnit.SECONDS);
Observer<Long> v2Observer = BehaviorSubject.createDefault(-1L);
v2hot.subscribe(v2Observer); // void

最佳答案

All other subscribe methods return一个 Disposable .在您的示例中, TestObserver 本身实现 Disposable ,所以您可以调用 dispose() 在观察者本身处理订阅。

否则你可以使用 DisposableObserver 作为您自己的自定义观察者的基类,以拥有 Disposable 抽象基类提供给您的行为。

编辑 回答更新的问题:

如果您需要使用 subscribe(Observer) 方法(返回 void 的方法),但您需要使用 Observer没有实现 Disposable ,您仍然可以选择包装 Observer SafeObserver 这将为您提供Disposable行为(以及其他契约(Contract)一致性保证)。

关于rx-java - 观察者一次性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com