我收到了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();
}
类的类实例...
当您尝试在“活动”中创建对话框时,会发生异常,但“活动”已完成。窗口不再是可用的。所以,改变上下文:
FragmentActivity
在进一步检查游戏存储崩溃/ ANR数据后,我注意到这只发生在特定的Android版本上;并且正如我在问题中最初所指出的那样,它只发生在源自FragmentActivity
的类中,这使我得出结论,在Android版本的qazxswpoi impl中必定存在某种错误,因为我正在采取我理解的所有预防措施有必要避免在销毁活动上出现一个对话框(这是此例外的常见原因)。