我定义了一个类似的加载对话框
private val loadingDialog: LoadingDialog by lazy { LoadingDialog() }
loadingDialog
是DialogFragment
当我使用leakcanary
观看我的应用程序时,我发现loadingDialog
导致内存
有人能帮我吗?
当定义val
委托的by lazy {...}
时,传递给委托的lambda会将作用域捕获到其闭包中(尽管在您的情况下它只是外部this
,但它可能是Activity
实例(。
然后,委托实例保存它捕获的引用,直到首次访问val
为止。然后它调用lambda并"忘记"闭包。
但是,如果您的val
访问得太晚(或从未访问过(,lambda的闭包可能会将对象保留在内存中,否则这些对象将被丢弃,这可能是内存泄漏。