gpt4 book ai didi

java - 当我取消订阅 Observable 链时会发生什么?

转载 作者:行者123 更新时间:2023-12-02 10:26:45 25 4
gpt4 key购买 nike

我在我正在使用的 Android 应用程序中使用 RxJava。我想知道当我取消订阅 Observable 链时会发生什么。

假设我指的是以下可观察链:

sourceObservable
.map { ... }
.doOnNext { ... }
.flatMap { ... }

我看到 3 个可能的答案:

  1. 当我取消订阅时,源可观察对象将停止,即源可观察对象停止发出项目。最后发出的项目沿着链向下直到结束。它会导致每个运算符(operator)被解雇。

  2. 当我取消订阅时,源可观察对象停止。最后发出的项不会下降,但它当前正在执行的操作符(例如 doOnNext)被允许完成。

  3. 当我取消订阅时,源可观察对象停止并且根本不再执行任何代码。这意味着,假设我正在使用 doOnNextdoOnNext 中的代码将停在原处,并且不允许完成。

哪一个(如果有的话)是正确的?答案是否取决于可观测源是热源还是冷源?在运营商上?

最佳答案

如果发射了一个项目,并且您立即处置该项目想要停止的流,它将被处理,直到完成处理,但不会再发射任何项目。

所以如果你看这个例子也许你会更好地理解

     observable = Observable.interval(100, TimeUnit.MILLISECONDS)
.map(aLong -> {
System.out.println("1");
return aLong;
})
.map(aLong -> {
observable.dispose();
System.out.println("2");
return aLong;
})
.map(aLong -> {
observable.dispose();
System.out.println("3");
return aLong;
})
.doOnNext(aLong -> System.out.println("4"))
.map(aLong -> {
observable.dispose();
System.out.println("5");
return aLong;
})
.subscribe();
}

在此流中,只有第一个项目会被处理,直到流结束,因此即使我们所做的第一项工作是取消订阅,我们仍然会处理发出的项目,因此我们从发射源取消订阅

关于java - 当我取消订阅 Observable 链时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53893720/

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