繁体   English   中英

取消订阅可观察链时会发生什么?

[英]What happens when I unsubscribe from an Observable chain?

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

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

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

我看到3个可能的答案:

  1. 当我退订时,可观察的源停止,即sourceObservable停止发射项目。 发出的最后一个项目沿着链条下降直到结束。 这会导致每个操作员被解雇。

  2. 当我退订时,可观察到的源停止。 最后发出的项不会下降,但允许其当前正在通过的操作员完成(例如doOnNext )。

  3. 当我退订时,可观察到的源停止并且根本不再执行任何代码。 这意味着,说我是用doOnNext ,在代码doOnNext将停止它在哪里,不会被允许完成。

其中哪一个(如果有)是正确的? 答案取决于可观察到的源是热还是冷? 对运营商?

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

因此,如果您观看此示例,也许您会更好地理解

     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();
}

在此流中,只有第一个项目将被处理到流的结尾,因此,即使我们要做的第一项工作是取消订阅,我们仍将处理已发出的项目,因此我们将取消订阅的来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM