Java 窗口泄漏问题

Java 窗口泄漏问题,java,android,Java,Android,我有一个很大的问题: E/WindowManager: android.view.WindowLeaked: Activity CrearGrupo has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{3702bf39 V.E..... R....... 0,0-960,883} that was originally added here

我有一个很大的问题:

E/WindowManager: android.view.WindowLeaked: Activity CrearGrupo has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{3702bf39 V.E..... R....... 0,0-960,883} that was originally added here
                                                             at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
                                                             at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
                                                             at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                             at android.app.Dialog.show(Dialog.java:298)
                                                             at es.uva.tel.gco.CrearGrupo$2.onClick(CrearGrupo.java:175)
                                                             at android.view.View.performClick(View.java:4780)
                                                             at android.view.View$PerformClick.run(View.java:19866)
                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                             at android.os.Looper.loop(Looper.java:135)
                                                             at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                             at java.lang.reflect.Method.invoke(Method.java:372)
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
对话框是一个普通窗口,有两个输入,允许您输入一个名称和一个前缀,但当我尝试显示另一个对话框时,应用程序崩溃。 我已经在寻找解决方案,并尝试通过以下方式解决:

 @Override
public void onDestroy() {
    super.onDestroy();
    if (dialog2 != null) {
        dialog2.dismiss();
        dialog2 = null;
    }
}

@Override
protected void onPause(){
    super.onPause();
    if (dialog2 != null) {
        dialog2.dismiss();
        dialog2 = null;
    }

}

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

}
但它不起作用。任何想法


谢谢您的回答。:)

在您的情况下,您将尝试在启动新活动后调用dialog2.show()。删除它,你的代码就会工作

以下是发生泄漏windows错误的主要原因:

我们知道Android的每个活动都有一个WindowManager窗口管理器,同样,它构建在活动对话框的顶部,PopupWindow也有相应的WindowManager窗口管理器。因为对话框、PopupWindow从活动中删除,并且不应单独存在,所以当我们转到带有对话框(或PopupWindow)活动的finish()时显示对话框或PopupWindow时,将引发窗口泄漏异常。因为对话框(或PopupWindow)WindowManager有谁不能关联。,所以窗口管理器泄漏了

Android.view.windows通常出现在活动和对话框的显示中

在对话框中创建活动,如果先关闭对话框然后关闭活动是正常的,如果先关闭活动然后关闭对话框将出现错误android.view.windowsleek。
分析原因是:对话框是基于活动创建的:new ProgressDialog(此);这是一种活动。活动首先完成,然后对话框将没有附件,因此将报告android.view.windowsleek

删除dialog2=null;从所有3种方法中,每次都创建新的dialog2对象:final Dialog dialog2通过生成全局对话框来更改它object@Aquo169在调用意图之前,必须关闭对话框。如果(control==0){dialog2.disease()//所有意图代码}这是一个警告,说明在启动新意图之前,对话框未关闭。使用
对话框2.disclose()然后执行重定向操作!我尝试在if(control==0)之前设置dialog2.show(),在if和inten之间设置dialog2.dissmis,但我仍然有windowleak:(为什么同时打开对话框和intent。应该将dialog.show()放在else部分。比如:if(control==0){startActivity();}else{dialog.show();}我正在尝试创建一个对话框来获取一些必要的信息。当用户介绍它并按“继续”时,新窗口将获取并处理此信息。我想我已经了解了。只需将“如果”移到“显示”,并在“条件”中引入“驳回”。有关答案,请参阅Thx:)
 @Override
public void onDestroy() {
    super.onDestroy();
    if (dialog2 != null) {
        dialog2.dismiss();
        dialog2 = null;
    }
}

@Override
protected void onPause(){
    super.onPause();
    if (dialog2 != null) {
        dialog2.dismiss();
        dialog2 = null;
    }

}

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

}