【问题标题】:WindowManager: MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40731aa0 that was originalWindowManager:MainActivity 泄露了原来的窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@40731aa0
【发布时间】:2013-10-10 11:54:18
【问题描述】:

这个警告是什么意思?我开发了一个 android 应用程序,我在 logcat 中看到了这个警告。此警告不会导致关闭应用程序。一切运行都没有任何问题或中断,但它会导致一些在我的应用程序中看不到的问题吗?

Continue logcat:    at android.view.ViewRoot.<init>(ViewRoot.java:261)
                        atandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:170)....

【问题讨论】:

    标签: java android


    【解决方案1】:

    此异常的原因是,您的 Activity 正在通过在 Activity 中调用 finish() 或其他 ExceptionActivity 中抛出而被销毁,而您的 Dialog 正在显示..

    解决方案是在退出 Activity 之前在视图中创建的 Dialog 上调用 dismiss(),例如在onPause()。在离开活动之前,所有窗口和对话框都应该关闭。如果你不关闭对话框,它会给你这个异常..

    如下图

    @Override
    protected void onStop() {
        super.onStop();
        if (dialog!=null) {
            if (dialog.isShowing()) {
                dialog.dismiss();       
            }
        }
    }
    

    【讨论】:

    • 谢谢它有效。我在代码中的错误位置使用了dismiss()。我会重新考虑并重新组织我的代码,以便在离开 Activity 之前关闭所有窗口和对话框。