Android LoginActivity已泄漏窗口DecorView@bb62df1最初添加到此处的[LoginActivity]

Android LoginActivity已泄漏窗口DecorView@bb62df1最初添加到此处的[LoginActivity],android,android-alertdialog,Android,Android Alertdialog,我不断收到一个错误,我的登录活动有一个某种泄漏的窗口, 这是发生错误的代码块。我试图分别关闭对话框和警报框,但仍然会出现此错误 try { AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); builder.setTitle(R.string.login_ok_title); builder.setMessage(R.string.lo

我不断收到一个错误,我的登录活动有一个某种泄漏的窗口, 这是发生错误的代码块。我试图分别关闭对话框和警报框,但仍然会出现此错误

    try
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
        builder.setTitle(R.string.login_ok_title);
        builder.setMessage(R.string.login_ok_text).setCancelable(false).setPositiveButton(R.string.ok, (dialog, id) ->
        {
            Intent intent =new Intent(LoginActivity.this, TrackActivity.class);
            startActivity(intent);
            TrackManagerService trackManager =TrackManagerService.getInstance();
            if (trackManager != null) {
                trackManager.setLoginListener(null);
            }

            LoginActivity.this.finish();
            dialog.dismiss();
        });
        alert = builder.create();
        alert.show();

    } 
    catch (Exception ex)
    {
        ex.printStackTrace();
        Intent intent = new Intent(LoginActivity.this, TrackActivity.class);
        alert.dismiss();
        startActivity(intent);
        TrackManagerService trackManager = TrackManagerService.getInstance();
        if (trackManager != null) 
        {
            trackManager.setLoginListener(null);
        }
        finish();
    }
这是错误日志

E/WindowManager: android.view.WindowLeaked: Activity com.example.tornado_app.LoginActivity has leaked window DecorView@59e20b9[LoginActivity] that was originally added here
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:627)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:389)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:131)
    at android.app.Dialog.show(Dialog.java:531)
    at com.example.tornado_app.LoginActivity$2.lambda$onLoginResult$4$LoginActivity$2(LoginActivity.java:160)
    at com.example.tornado_app.-$$Lambda$LoginActivity$2$YvCiBtxWavxZ1iGtdLspSkuZOdU.run(Unknown Source:6)
    at android.os.Handler.handleCallback(Handler.java:907)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7625)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
E/WindowManager:android.view.WindowLeaked:Activity com.example.tornado\u app.LoginActivity已泄漏窗口DecorView@59e20b9最初添加到此处的[LoginActivity]
在android.view.ViewRootImpl。(ViewRootImpl.java:627)
位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:389)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:131)
在android.app.Dialog.show上(Dialog.java:531)
在com.example.tornado_app.LoginActivity$2.lambda$onLoginResult$4$LoginActivity$2(LoginActivity.java:160)
在com.example.tornado_应用程序上。-$$Lambda$LoginActivity$2$YvCiBtxWavxZ1iGtdLspSkuZOdU.run(未知来源:6)
位于android.os.Handler.handleCallback(Handler.java:907)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:216)
位于android.app.ActivityThread.main(ActivityThread.java:7625)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

在显示对话框之前,请尝试检查活动是否已完成

 if (!isFinishing()){
       alert.show();
    }

在显示对话框之前,请检查活动是否完成

 if (!isFinishing()){
       alert.show();
    }

为什么要使用2次
dialog.discouse()活动完成后,如何关闭对话框?请尝试添加以下代码

try {
    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
    builder.setTitle(R.string.login_ok_title);
    builder.setMessage(R.string.login_ok_text).setCancelable(false).setPositiveButton(R.string.ok, (dialog, id) ->
    {
        //dialog.dismiss(); //Remove this
        Intent intent = new Intent(LoginActivity.this, TrackActivity.class);
        startActivity(intent);

        TrackManagerService trackManager = TrackManagerService.getInstance();
        if (trackManager != null) {
            trackManager.setLoginListener(null);
        }

        LoginActivity.this.finish();
        //dialog.dismiss(); //Remove this
    });
    alert = builder.create();
    alert.show();

} catch (Exception ex) {
    ex.printStackTrace();
    Intent intent = new Intent(LoginActivity.this, TrackActivity.class);
    startActivity(intent);
    TrackManagerService trackManager = TrackManagerService.getInstance();
    if (trackManager != null) {
        trackManager.setLoginListener(null);
    }
    finish();
}

我希望这能帮助你

为什么要使用2次
dialog.disease()活动完成后,如何关闭对话框?请尝试添加以下代码

try {
    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
    builder.setTitle(R.string.login_ok_title);
    builder.setMessage(R.string.login_ok_text).setCancelable(false).setPositiveButton(R.string.ok, (dialog, id) ->
    {
        //dialog.dismiss(); //Remove this
        Intent intent = new Intent(LoginActivity.this, TrackActivity.class);
        startActivity(intent);

        TrackManagerService trackManager = TrackManagerService.getInstance();
        if (trackManager != null) {
            trackManager.setLoginListener(null);
        }

        LoginActivity.this.finish();
        //dialog.dismiss(); //Remove this
    });
    alert = builder.create();
    alert.show();

} catch (Exception ex) {
    ex.printStackTrace();
    Intent intent = new Intent(LoginActivity.this, TrackActivity.class);
    startActivity(intent);
    TrackManagerService trackManager = TrackManagerService.getInstance();
    if (trackManager != null) {
        trackManager.setLoginListener(null);
    }
    finish();
}


我希望这能帮助你

启动另一个活动后不要关闭对话框。在开始另一项活动之前,请先将其关闭。这是否回答了您的问题?我确实检查了它,那是在我添加警报的时候;语句,但它一直在发生。不要在启动另一个活动后关闭对话框。在开始另一项活动之前,请先将其关闭。这是否回答了您的问题?我确实检查了它,那是在我添加警报的时候;声明,但它不断发生。是的,我以前做过,但它仍然给我这个问题。我改变了我的答案。请再试一次,我刚刚做了,但它仍然抛出此错误
Activity com.example.tornado\u app.LoginActivity已泄漏窗口DecorView@aeec1d9[LoginActivity]最初添加于android.view.ViewRootImpl.(ViewRootImpl.java:627)的android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:389)在com.example.tornado\u app.LoginActivity$2.lambda$onLoginResult$4$LoginActivity$2(LoginActivity.java:160)
谢谢你,这很好,我尝试了重建和清理项目,然后再次运行。是的,我以前做过,但它仍然给我这个问题。我改变了答案。请再试一次,我刚刚做了,但它仍然抛出此错误
Activity com.example.tornado\u app.LoginActivity已泄漏窗口DecorView@aeec1d9[LoginActivity]最初添加于android.view.ViewRootImpl.(ViewRootImpl.java:627)的android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:389)在com.example.tornado\u app.LoginActivity$2.lambda$onLoginResult$4$LoginActivity$2(LoginActivity.java:160)
谢谢你,这很好,我尝试了重建和清理项目,然后再次运行。你尝试过吗?是的,我尝试过,但没有成功。我希望在活动开始后将其关闭,也就是为什么我将其保持在startActivity()之下。@Ibrahim117您是否尝试删除对话框。对所有代码关闭()?可能是错误。您可以共享您的完整LoginActivity代码吗?给您,您是否尝试过此操作?是的,我尝试过,但它不起作用。我希望它在活动开始后关闭,即为什么我将其保持在startActivity()以下。@Ibrahim117是否尝试删除对话框。关闭所有代码?可能是错误,您可以共享完整的LoginActivity代码吗?给您,