AlertDialog.Builder上的“android.view.WindowManager $ BadTokenException”#显示甚至带有安全措施

问题描述 投票:0回答:2

我收到了android.view.WindowManager$BadTokenException异常,即使是(我理解为所有必要的)保护措施围绕创建和显示对话框。

这是创建和显示对话框的代码的等价物:

public class MyFragmentActivity extends FragmentActivity

    public void handleErrorDialogOk() {
        ...
    }

    public void makeErrorDialog(){
        if (!isFinishing()){
            runOnUiThread(new Runnable()
            {
                @Override
                public void run()
                {
                    if (isFinishing())
                        return;

                    new AlertDialog.Builder(MyFragmentActivity.this)
                        .setTitle("Some title")
                        .setMessage("Some message")
                        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                handleErrorDialogOk();
                            }
                        })
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .show();
                }
            });

        }
    }
}

我一直没有看到它,它似乎是随机的,我无法重现它(只在发布的应用程序的游戏商店的ANRs & crashes标签中看到它)。

我在这里做错了吗?

或者这可能是FragmentActivity的错误?我似乎没有看到它出现在任何AlertDialogs,这些Activity来自标准 if(!context.isFinishing()){ //FragmentActivity is the context builder.show(); } 类的类实例...

android android-activity alertdialog android-alertdialog android-fragmentactivity
2个回答
0
投票

当您尝试在“活动”中创建对话框时,会发生异常,但“活动”已完成。窗口不再是可用的。所以,改变上下文:

FragmentActivity

0
投票

在进一步检查游戏存储崩溃/ ANR数据后,我注意到这只发生在特定的Android版本上;并且正如我在问题中最初所指出的那样,它只发生在源自FragmentActivity的类中,这使我得出结论,在Android版本的qazxswpoi impl中必定存在某种错误,因为我正在采取我理解的所有预防措施有必要避免在销毁活动上出现一个对话框(这是此例外的常见原因)。

© www.soinside.com 2019 - 2024. All rights reserved.