异常内容:
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);