为什么懒惰的kotlin会导致android内存泄漏



我定义了一个类似的加载对话框

private val loadingDialog: LoadingDialog by lazy { LoadingDialog() }

loadingDialogDialogFragment

当我使用leakcanary观看我的应用程序时,我发现loadingDialog导致内存

有人能帮我吗?

当定义val委托的by lazy {...}时,传递给委托的lambda会将作用域捕获到其闭包中(尽管在您的情况下它只是外部this,但它可能是Activity实例(。

然后,委托实例保存它捕获的引用,直到首次访问val为止。然后它调用lambda并"忘记"闭包。

但是,如果您的val访问得太晚(或从未访问过(,lambda的闭包可能会将对象保留在内存中,否则这些对象将被丢弃,这可能是内存泄漏。

最新更新