作者:mobiledu2502873093 | 来源:互联网 | 2022-12-08 14:49
我定义了一个这样的加载对话框
private val loadingDialog: LoadingDialog by lazy { LoadingDialog() }
loadingDialog
是一个 DialogFragment
当我leakcanary
用来观看我的应用程序时,我找到了loadingDialog
原因记忆
有人能帮助我吗?
1> hotkey..:
当您定义val
委托时by lazy {...}
,传递给委托的lambda会将范围捕获到其闭包中(尽管它只是this
您的情况下的外部,它可能是一个Activity
实例).
然后委托实例保存它捕获的引用,直到val
第一次访问它为止.然后它调用lambda并'忘记'闭包.
但是如果val
访问得太晚(或从不),lambda的闭包可能会将对象保留在内存中,否则会被丢弃,这可能是内存泄漏.