您的位置:首页 > 其它

is not valid; is your activity running?异常

2017-04-19 11:32 281 查看
异常内容:

android.view.WindowManager$BadTokenException: Unable to add window – token android.os.BinderProxy@412ae140 is not valid; is your activity running?

报错位置:

dialog.show();

异常产生:

加载Activity时,有个弹窗,在弹窗加载成功之前按下back返回键,应用程序闪退。

原因:

在Activity生命周期未完成挂载之前,又加载了其它的Activity,比如AlertDialog。在这个时候调用系统的back,或者home键,会执行onStop方法。

如果弹窗加载未完成就会造成崩溃现象。

解决办法:

1、如果弹窗获取的数据是从服务器获取的,那就在请求的时候,根据信息判断是否要加载弹窗。

这样在initView中初始化数据的时候,会先执行网络请求这一部分。

这样的结果是,如果网络状态不好或者请求失败,那么弹窗就不会出现。

以不影响其他方法的执行

ShopRequest.getDialogMS(new ApiCallBack2<EDUDialogModel>() {
@Override
public void onMsgFailure(String errMsg) {
// TODO Auto-generated method stub
super.onMsgFailure(errMsg);
}

public void onMsgSuccess(EDUDialogModel param) {
if (param.message.toString().equals("")) {

} else {
showWarningDialog(param.message);
}
};
});


2、使用try catch 捕获异常

try {
createAlertDialog(msg);
} catch (Exception e) {
}


3、在弹窗显示之前加入判断

if(!this.isFinishing() && !warningDialog .isShowing())
warningDialog .show();


4、设置父的上下文

warningDialog = new AlertDialog.Builder(getParent()).create();
View view = View.inflate(getParent(), R.layout.warning_dialog, null);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐