当您的应用程序尝试访问不再有效的上下文时,您将遇到“android.view.WindowManager$BadTokenException”异常。这通常发生在应用程序正在关闭时,例如在后台运行的服务或活动。如果您的应用程序由于任何原因尝试在这种情况下启动新活动,那么这种异常将被抛出。以下是避免和解决这种情况的一些方法:
1.确保只在Activity或Dialog上下文中进行弹出
if(!((Activity)context).isFinishing())
alertDialog.show();
2.如果必须在服务中添加窗口,则使用TYPE_APPLICATION_OVERLAY
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
params.type = WindowManager.LayoutParams.TYPE_PHONE;
}
3.在onDestroy()中取消所有弹出窗口和任务,以避免在应用程序关闭过程中弹出新任务
@Override
public void onDestroy() {
if(alertDialog != null && alertDialog.isShowing()) {
alertDialog.dismiss();
}
super.onDestroy();
}