在我的代码库中有几种情况,我订阅的流只会发出一个结果,因此使用rx.Single
而不是rx.Observable
是有意义的。 Single的documentation表示以下内容:
Single将仅调用其中一种方法,并且只会调用它 一旦。在调用任一方法时,Single终止并且 订阅结束。
使用传统的Observable
我捕获对Subscription的引用,以便我可以在适当的时候取消订阅而不会导致内存泄漏:
Subscription s = getObservable().subscribe(...);
subscriptions.add(s);
subscriptions.clear();
我的问题是,对于单身是否有必要,或者由于订阅立即结束,它可以简单地保留为:
getSingle.subscribe(...);
没有任何负面影响被引用到订阅者。
答案 0 :(得分:8)
Single
没有告诉您 它将会运行多长时间。
由于您的目标是Android,答案是是,您应该保留订阅并取消订阅。
想象一下,您正在切换碎片/活动,并且会调用长时间运行的SingleSubscribers's
onSuccess
。因此,最佳时间和空间可能在onPause()
,但这取决于您的背景。
如果您没有取消订阅,您可能会遇到NullPinterExceptions
,多次填充适配器或类似问题。
答案 1 :(得分:1)
您需要清除Observable上的订阅的任何原因吗?一旦观察者拥有所有项目,就可以通过设计进行观察,并自动取消订阅。
然后,由于实例不再是引用,GC在某些时候会为你清理。
您可以在这些示例中看到在达到onComplete后订阅是如何取消订阅的。