取消订阅RxJava中的rx.Single

Jah*_*old 9 android rx-java

在我的代码库中有几种情况,我订阅的流只会发出一个结果,因此使用rx.Single而不是rx.Observable.Single 的文档说明如下:

Single将只调用其中一种方法,并且只调用一次.在调用任一方法时,Single终止并且对它的订阅结束.

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

Subscription s = getObservable().subscribe(...);
subscriptions.add(s);
subscriptions.clear();
Run Code Online (Sandbox Code Playgroud)

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

getSingle.subscribe(...);
Run Code Online (Sandbox Code Playgroud)

没有任何负面影响的参考被保留到订户.

Lov*_*vis 8

Single并没有告诉你它将运行多长时间.

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

想象一下,你正在切换碎片/活动,并且需要长时间运行SingleSubscribers's onSuccess.所以最好的时间和空间可能在onPause(),但这取决于你的背景.

您可能会遇到NullPinterExceptions,如果您不取消订阅,适配器会被多次填充或类似的问题.