【问题标题】:How to clean up Rx Subscription and Observable to prevent memory leaks?如何清理 Rx Subscription 和 Observable 以防止内存泄漏?
【发布时间】:2017-09-21 15:34:27
【问题描述】:

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

【问题讨论】:

    标签: java android rx-java observable rx-android


    【解决方案1】:

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

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

    然后调用sub.unsubscribe() 将释放资源。

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

    清空资源可能无法满足您的需求,也不是您所需要的,尤其是在有多个订阅的情况下。

    【讨论】:

    • observables 呢?
    • 如果你有一个订阅了另一个 observable 的 Subject,你可能想取消订阅它。否则,一个可观察对象在被订阅之前是一个被动对象。没有订阅,冷的 observable 什么都不做。 hot observable 将尝试找到任何订阅者并向他们发送数据,否则不会消耗资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2016-05-31
    • 2010-09-21
    • 1970-01-01
    • 2021-07-13
    • 2015-02-05
    相关资源
    最近更新 更多