我收到了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
...
答案 0 :(得分:0)
当您尝试在“活动”中创建对话框时,会发生异常,但“活动”已完成。窗口不再是可用的。所以,改变上下文:
if(!context.isFinishing()){
//FragmentActivity is the context
builder.show();
}
答案 1 :(得分:0)
在进一步检查Play商店的崩溃/ ANR数据后,我注意到这仅在特定的Android版本上发生;就像我最初在问题中指出的那样,它仅发生在从FragmentActivity
派生的类上,这使我得出结论,在该Android版本上,FragmentActivity
暗示中肯定存在某种错误,因为我我正在采取所有我认为是必要的预防措施,以避免针对破坏活动提出对话(这是造成此异常的常见原因)。