如何清理Rx Subscription和Observable以防止内存泄漏?

如何清理Rx Subscription和Observable以防止内存泄漏?

问题描述:

我正在研究一个项目,该项目频繁使用Rx Java订阅和观察值,而且我对这个概念非常陌生。我想知道处理它们的最佳做法是什么。目前,我只是将doOnUnsubscribe()函数中的订阅/观察值归零,并且使用takeUntil()PublishSubject来触发观测值的断开连接。这是清理这些引用的正确方法还是有更好的方法?谢谢!如何清理Rx Subscription和Observable以防止内存泄漏?

当订阅自然结束时,通过onCompleted()onError()订阅被清除。如果使用:

Subscription sub = observable.subscribe(value -> doSomeStuff()); 

然后调用sub.unsubscribe()将释放资源。您可以使用CompositeSubscription来保存所有未完成的订阅。在组合上执行clear()时,所有包含的订阅都将取消订阅并删除;当您从组合复制unsubscribe()时,所有包含的订阅都将取消订阅,然后复合订阅本身将取消订阅。

排除资源可能无法达到您想要的效果,也不需要,特别是在有多个订阅的情况下。

+0

可观察物质呢? –

+1

如果您有一个订阅了另一个observable的Subject,您可能需要取消订阅它。否则,一个observable是一个被动对象,直到它被订阅。没有订阅,冷观察无所作为。一个热门的可观察者会试图找到任何用户并向他们发送数据,但否则不会消耗资源。 –