6

为什么要在销毁 Activity 之前为 AlertDialog 调用dismiss() 方法?有些东西泄漏了,但究竟是什么?那么为什么 PopupWindow 可以处理 Activity 销毁呢?

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

Window w = PolicyManager.makeNewWindow(mContext);

这意味着什么?为什么它不能只使用从活动中获得的 PhoneWindow?

添加

比如说,AlertDialog 引用 Context,Context 什么都不引用,那么 GC 应该垃圾收集这两个对象(因为它们不是从“外部”引用的)。还有什么对 AlertDialog 的引用?换句话说,内存泄漏到底在哪里?

4

1 回答 1

1

警报对话框使用 id 附加到我们的活动,此链接显示警报对话框的活动,一旦显示警报对话框,它就是一个单独的窗口(你设置取消 false 然后你强制管理它)如果它在后面运行并且你的活动被销毁与它相关的每个内存都将被释放,包括 AlertDialog 的 id。那就是弹出错误。我认为现在很清楚。

于 2013-04-07T05:06:50.127 回答