如何清理Rx Subscription和Observable以防止内存泄漏?
问题描述:
我正在研究一个项目,该项目频繁使用Rx Java订阅和观察值,而且我对这个概念非常陌生。我想知道处理它们的最佳做法是什么。目前,我只是将doOnUnsubscribe()
函数中的订阅/观察值归零,并且使用takeUntil()
和PublishSubject
来触发观测值的断开连接。这是清理这些引用的正确方法还是有更好的方法?谢谢!如何清理Rx Subscription和Observable以防止内存泄漏?
答
当订阅自然结束时,通过onCompleted()
或onError()
订阅被清除。如果使用:
Subscription sub = observable.subscribe(value -> doSomeStuff());
然后调用sub.unsubscribe()
将释放资源。您可以使用CompositeSubscription
来保存所有未完成的订阅。在组合上执行clear()
时,所有包含的订阅都将取消订阅并删除;当您从组合复制unsubscribe()
时,所有包含的订阅都将取消订阅,然后复合订阅本身将取消订阅。
排除资源可能无法达到您想要的效果,也不需要,特别是在有多个订阅的情况下。
可观察物质呢? –
如果您有一个订阅了另一个observable的Subject,您可能需要取消订阅它。否则,一个observable是一个被动对象,直到它被订阅。没有订阅,冷观察无所作为。一个热门的可观察者会试图找到任何用户并向他们发送数据,但否则不会消耗资源。 –