我为什么要在Android中手动关闭AlertDialog?

se.*_*yev 5 android memory-leaks android-alertdialog

为什么在销毁Activity之前我应该​​为AlertDialog调用dismiss()方法?有什么东西泄漏,但到底是什么?为什么PopupWindow可以处理Activity破坏?

我在Android源代码中发现每个警报对话框都会创建窗口:

Window w = PolicyManager.makeNewWindow(mContext);
Run Code Online (Sandbox Code Playgroud)

那是什么意思?为什么它不能只使用从活动中获得的PhoneWindow?

添加

再说了,AlertDialog引用的上下文,上下文引用不存在,则应该GC垃圾收集两个对象(因为它们不是从"外部"引用).还有什么提到AlertDialog?换句话说,内存泄漏到底在哪里?

Vis*_*nan 1

Alertdialogs 使用 id 附加到我们的活动,此链接显示警报对话框的活动,一旦显示警报对话框,它就是一个单独的窗口(您设置取消为 false,然后您被迫管理它)如果它在后台运行并且您的活动被销毁 与其关联的所有内存都将被释放,包括 AlertDialog 的 id。这就是错误弹出的原因。我想现在已经很清楚了。