错误:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@27773032无效;你的活动在运行吗?
代码
@Override
public void showInviteDialog(final IncomingInvite incomingInvite) {
// setCallAlert2(incomingInvite);
runOnUiThread(new Runnable() {
@Override
public void run() {
alertDialog = Dialog.createInviteDialog(incomingInvite.getInviter(),
acceptCallClickListener(incomingInvite), rejectCallClickListener(incomingInvite),
HomeActivity.this);
alertDialog.show();
}
});
}
尝试过的解决方案
if(!isFinishing()){
alertDialog = Dialog.createInviteDialog(incomingInvite.getInviter(),
acceptCallClickListener(incomingInvite), rejectCallClickListener(incomingInvite),
HomeActivity.this);
alertDialog.show();
}
输出:没有崩溃。但没有提醒。
检查了类似的问题,但我没有找到任何确切的解决方案,所有都是为了避免崩溃(如检查活动是否存在等)。不是为了显示警报。
注意:必须显示警告。
答案 0 :(得分:0)
这里发生了什么。在尝试显示警报之前,您有一个被杀死的活动 - 由于配置更改或由于活动自然结束。由于您的活动已停止,因此无权显示警报。因此例外。完成检查(或只是一个捕获和忽略)将通过不尝试显示警报来修复崩溃。
如果你的活动被正常杀死,那么这里没什么可做的。这是预期的,一个死活动不应该显示一个对话框。如果由于配置更改(如旋转)而重新创建,则新活动需要是显示对话框的活动。如果这是由于加载数据,则需要使用Loader或类似技术来确保旧活动可以从原始数据访问加载数据。这适用于来自服务器的任何异步数据 - 新的Activity需要是接收它的那个,而不是旧的。