WindowLeaked问题

时间:2017-04-25 11:17:09

标签: java android

我在WindowLeaked遇到了一个大问题:

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)

这里是代码:

            final Dialog dialog2 = new Dialog(activity, R.style.dialog);
            tituloDialogo=res.getString(R.string.crearGrupoDiálogo);
            dialog2.setTitle(tituloDialogo +" "+listaAsignaturas.get(pos));
            dialog2.setContentView(R.layout.prefijo_grupo);
if (control == 0){
                        //listNotebooks(pos);
                        Intent intent=new Intent(getApplicationContext(),MostrarCrearGrupos.class);
                        intent.putExtra("asignatura",listaAsignaturas.get(pos));
                        intent.putExtra("prefijo",prefGrupo.getText().toString());
                        intent.putExtra("nombreLibreta",notebookName);
                        startActivity(intent);

                    }
                }
            });
            dialog2.show();

Dialog是一个普通的窗口,有2个输入,可以输入一个名字和1个前缀但是当我尝试显示另一个对话框时,应用程序崩溃了。 我已经找到了解决方案,并尝试用以下方法解决:

 @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;
    }

}

但它不起作用。有任何想法吗。

谢谢你的回答。 :)

1 个答案:

答案 0 :(得分:0)

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

以下是出现泄漏窗口错误的主要原因:

我们知道每个Activity Android都有一个WindowManager窗口管理器,同样,它建立在一个Activity对话框之上,PopupWindow也有相应的WindowManager窗口管理器。因为对话框,来自Activity的PopupWindown并不应该单独存在,所以当我们进入带有Dialog(或PopupWindow)Activity的finish()时会显示一个Dialog或PopupWindow,会抛出Window Leaked异常。对话框(或PopupWindow)WindowManager有谁不能加入。所以它已经泄露了窗口管理器。

Android.view.WindowLeaked通常出现在Activity和Dialog的显示中。

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