繁体   English   中英

结合RxJava了解Android内存泄漏

[英]Understanding Android Memory Leaks in combination with RxJava

我仍然不明白内存泄漏如何出现。

我知道,如果使用的东西(如单例)持有对某事的引用,则无法对该对象进行垃圾收集并且可用内存将减少。

但是这发生在什么范围? 我使用RxBinding从click事件创建和观察。 范围在这里 ,它说:

警告:创建的可观察对象强烈引用{@code view}。 退订以释放此参考。

为什么这是必要的? 当我在onCreate中将手动侦听器设置为匿名内部类时,它具有对活动的引用,对吗? 但是,为什么不能再对整个活动视图可观察的订阅进行垃圾收集了?

当我在onCreate中将手动侦听器设置为匿名内部类时,它具有对活动的引用,对吗? 但是,为什么不能再对整个活动视图可观察的订阅进行垃圾收集了?

在这种简单的情况下,可以将其收集为垃圾,并且不应该泄漏。

为什么[退订]是必需的?

如您在上面的示例中那样,这可能不是严格必要的。 正如文档所述,这只是您应该注意的警告。 但是,遵循此方法是一个好习惯。

问题是您可能正在Rx链中执行其他任务,这些任务可能与RxBinding调用结合导致泄漏。 例如:

RxViews.clicks(clickableView)
    .flatMap(view -> getDataFromApi()
    .subscribe(data -> onDataLoaded(data));

在这种情况下,当使用另一个Observable单击按钮时,我们将从API获取数据。 该Observable仍然具有对click Observable的引用,因此在我们的API调用返回之前(可能永远不会),无法对引用的View进行垃圾回收。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM