当前位置:  开发笔记 > 编程语言 > 正文

与RxJava结合了解Android内存泄漏

如何解决《与RxJava结合了解Android内存泄漏》经验,为你挑选了1个好方法。

我仍然不明白内存泄漏是如何出现的.

我知道如果使用的东西(如单例)持有对其他的引用,则此对象不能被垃圾收集并且可用内存会关闭.

但是在这种情况下会发生什么?我使用RxBinding从单击事件创建和Observable.范围在这里,它说:

警告:创建的observable保留对{@code view}的强引用.取消订阅以免费提供此参考.

为什么这有必要?当我在onCreate中将手动监听器设置为匿名内部类时,它会引用该活动,对吧?但为什么整个activity-view-observable-subscription不能再被垃圾收集?



1> Tanis.7x..:

当我在onCreate中将手动监听器设置为匿名内部类时,它会引用该活动,对吧?但为什么整个activity-view-observable-subscription不能再被垃圾收集?

在这个简单的情况下,它可以被垃圾收集,你不应该有泄漏.

为什么需要[取消订阅]?

它可能不是绝对必要的,如上面给出的示例.正如文档所述,这只是一个警告,你应该知道.但是,这是一个很好的做法.

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

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

在这种情况下,当使用另一个Observable单击按钮时,我们将从API获取数据.Observable仍然引用了Click Observable,因此在我们的API调用返回之前,引用的View不能被垃圾收集(可能永远不会).

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有