Java 如何清理Rx订阅和Observable以防止内存泄漏?

Java 如何清理Rx订阅和Observable以防止内存泄漏?,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我正在从事一个经常使用RXJava订阅和可观察的项目,我对这个概念非常陌生。我想知道处理它们的最佳做法是什么。目前,我只是在dounsubscribe()函数中清空订阅/观测值,并使用takeUntil()和PublishSubject来触发观测值的断开。这是清理这些引用的正确方法还是有更好的方法?谢谢 当订阅通过onCompleted()或onError()自然结束时,订阅将被清除。如果您使用: Subscription sub = observable.subscribe( value -&

我正在从事一个经常使用RXJava订阅和可观察的项目,我对这个概念非常陌生。我想知道处理它们的最佳做法是什么。目前,我只是在
dounsubscribe()
函数中清空订阅/观测值,并使用
takeUntil()
PublishSubject
来触发观测值的断开。这是清理这些引用的正确方法还是有更好的方法?谢谢

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

Subscription sub = observable.subscribe( value -> doSomeStuff() );
然后调用
sub.unsubscribe()
将释放资源

您还可以使用
组合订阅
保存所有未完成的订阅。当您对组合执行
clear()
时,所有包含的订阅都将被取消订阅并删除;当您从组合中
unsubscribe()
时,包含的所有订阅将被取消订阅,然后组合订阅本身将被取消订阅


取消资源可能无法实现您想要的功能,也不需要它,尤其是在有多个订阅的情况下。

可观察对象呢?如果您有一个
主题
订阅了另一个可观察对象,您可能需要取消订阅。否则,在订阅之前,可观察对象是被动对象。没有订阅,冷冰冰的观察者什么也做不了。热可观察对象将尝试查找任何订阅者并向他们发送数据,但不会消耗资源。