5

在我的应用程序中,我有几个活动一个接一个。在我的登录屏幕之后,我有主屏幕,然后是几个屏幕。现在,当用户选择设备主页按钮或关机按钮时,我想在用户再次访问我的应用程序然后主屏幕时显示登录屏幕。休息所有活动,我正在从我的基础课程中完成它。现在到这里我已经完成了,我的问题是当我在其他一些活动中显示一个对话框时,如果用户点击主页或电源按钮,那么我得到了WINDOW LEAKED EXCEPTION

在此处输入图像描述

就像我有 TempActivity 正在显示一个对话框并且用户单击了主页按钮,因此 StoreActivity 和 TempActivity 将完成但 Dialog 从未有机会被解雇。那么处理这种情况的最佳方法是什么。有没有更好的方法来关闭对话框,这样我就不会遇到任何异常。

4

3 回答 3

2

覆盖onDestroy,在那里,检查对话框是否存在,如果存在,则关闭它。

于 2013-03-06T10:15:08.880 回答
2

onDestroy() 中的 dismiss() 并不能解决这个问题。尝试覆盖 activity.finish() ,例如:

@Override
public void finish() {
    if(mDialog != null) {
        mDialog.dismiss();
    }
    super.finish();
}
于 2016-01-26T06:25:20.927 回答
1

Dialog句柄放在成员对象中,然后当您完成最重要的活动时,首先关闭对话框。

您可以通过创建抽象Activity类(所有活动都扩展)来使这更整洁,这会在调用时关闭可能的对话框finish()

于 2013-03-06T10:10:30.913 回答