我的问题与此类似:
在 AsyncTask 中关闭 ProgressDialog 时出错
我有一个 AsyncTask 在 onPreExecute 中创建一个对话框,如下所示:
dialog = ProgressDialog.show(activity, "login", "logging in, one moment please");
并像这样关闭 onPostExecute 中的对话框:
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
尽管如此,我还是在执行 diolog.dismiss() 的行上收到用户的错误报告,消息是:java.lang.IllegalArgumentException: View not attach to window manager
最常见的根本原因是 - 或者我读过 - 当用户切换方向(从纵向到横向,反之亦然)时。然而,我的应用程序被迫进入纵向模式,所以这不是原因。(我已经仔细检查过,以确保它真的不可能)
前面提到的帖子的记者最终通过在活动类中为 AsyncTask 创建一个内部类并使用活动类中的 onCreateDialog 并从 AsyncTask 调用 showDialog 来解决它(我也在其他地方阅读过这个解决方案)。(如果你不明白这一点,请阅读他的帖子)我已经开始尝试实现这一点,但似乎 showDialog 已被弃用:所以这对我来说不是一个解决方案。
我发现的最后一个解决方案是简单地捕获异常。我自己也想过这个,但只是作为最后的手段。我更愿意了解真正出了什么问题并对此进行预测,而不是简单地捕捉异常而不知道发生了什么。