Java 如何清理Rx订阅和Observable以防止内存泄漏?
我正在从事一个经常使用RXJava订阅和可观察的项目,我对这个概念非常陌生。我想知道处理它们的最佳做法是什么。目前,我只是在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 -&
dounsubscribe()
函数中清空订阅/观测值,并使用takeUntil()
和PublishSubject
来触发观测值的断开。这是清理这些引用的正确方法还是有更好的方法?谢谢 当订阅通过onCompleted()
或onError()
自然结束时,订阅将被清除。如果您使用:
Subscription sub = observable.subscribe( value -> doSomeStuff() );
然后调用sub.unsubscribe()
将释放资源
您还可以使用组合订阅
保存所有未完成的订阅。当您对组合执行clear()
时,所有包含的订阅都将被取消订阅并删除;当您从组合中unsubscribe()
时,包含的所有订阅将被取消订阅,然后组合订阅本身将被取消订阅
取消资源可能无法实现您想要的功能,也不需要它,尤其是在有多个订阅的情况下。可观察对象呢?如果您有一个
主题
订阅了另一个可观察对象,您可能需要取消订阅。否则,在订阅之前,可观察对象是被动对象。没有订阅,冷冰冰的观察者什么也做不了。热可观察对象将尝试查找任何订阅者并向他们发送数据,但不会消耗资源。