微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – ProgressDialog和AlertDialog导致漏洞窗口

我有一个活动,如果第一次启动,显示欢迎信息:
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    showWelcomeMessageIfNecessary();
}

private void showWelcomeMessageIfNecessary() {
    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    final Editor edit = prefs.edit();

    if (!prefs.getBoolean("welcomemessage",false)) {
        edit.putBoolean("welcomemessage",true);
        edit.commit();

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(R.string.messages_welcome_content).setCancelable(false).setPositiveButton(R.string.errors_ok,new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // Do nothing
            }
        }).setTitle(R.string.messages_welcome_title);
        AlertDialog alert = builder.create();
        alert.show();
    }
}

这一切都很美妙,但是当我启动应用程序,并立即旋转屏幕,我得到了众所周知的泄漏窗口异常.

我该如何防止这种情况?有更好的方式来显示对话吗?当我在Fragments中的AsyncTasks中使用ProgressDialogs时也会发生这种情况.

解决方法

您需要在活动的onStop或onDestroy方法中取消对话框.例如:
private AlertDialog diag = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    diag = showWelcomeMessageIfNecessary();

    if(diag != null)
        diag.show();
}

private AlertDialog showWelcomeMessageIfNecessary() {
    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    final Editor edit = prefs.edit();
    AlertDialog alert = null;

    if (!prefs.getBoolean("welcomemessage",int id) {
                // Do nothing
            }
        }).setTitle(R.string.messages_welcome_title);
        alert = builder.create();
    }

    return alert;
}


@Override
protected void onStop() {
    super.onStop();

    if(diag != null)
        diag.dismiss();
}

原文地址:https://www.jb51.cc/android/311702.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐