取消订阅RxJava中的rx.Single

时间:2016-06-12 15:31:56

标签: android rx-java

在我的代码库中有几种情况,我订阅的流只会发出一个结果,因此使用rx.Single而不是rx.Observable是有意义的。 Single的documentation表示以下内容:

  

Single将仅调用其中一种方法,并且只会调用它   一旦。在调用任一方法时,Single终止并且   订阅结束。

使用传统的Observable我捕获对Subscription的引用,以便我可以在适当的时候取消订阅而不会导致内存泄漏:

Subscription s = getObservable().subscribe(...);
subscriptions.add(s);
subscriptions.clear();

我的问题是,对于单身是否有必要,或者由于订阅立即结束,它可以简单地保留为:

getSingle.subscribe(...);

没有任何负面影响被引用到订阅者。

2 个答案:

答案 0 :(得分:8)

Single没有告诉您 它将会运行多长时间。

由于您的目标是Android,答案是,您应该保留订阅并取消订阅。

想象一下,您正在切换碎片/活动,并且会调用长时间运行的SingleSubscribers's onSuccess。因此,最佳时间和空间可能在onPause(),但这取决于您的背景。

如果您没有取消订阅,您可能会遇到NullPinterExceptions,多次填充适配器或类似问题。

答案 1 :(得分:1)

您需要清除Observable上的订阅的任何原因吗?一旦观察者拥有所有项目,就可以通过设计进行观察,并自动取消订阅。

然后,由于实例不再是引用,GC在某些时候会为你清理。

您可以在这些示例中看到在达到onComplete后订阅是如何取消订阅的。

https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/creating/ObservableSubscription.java