私の問題はこれに似ています:
AsyncTaskでProgressDialogを閉じる際のエラー
onPreExecuteに次のようなダイアログを作成するAsyncTaskがあります。
dialog = ProgressDialog.show(activity, "login", "logging in, one moment please");
そして、次のようにonPostExecuteのダイアログを閉じます。
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
それでも、次のメッセージを含むdiolog.dismiss()を実行する行のユーザーからエラーレポートが表示されます:java.lang.IllegalArgumentException:ビューがウィンドウマネージャーに接続されていません
最も一般的な根本原因は、ユーザーが向きを切り替えたとき(縦向きから横向き、またはその逆)です。ただし、私のアプリはポートレートモードに強制されているため、これが原因になることはありません。(私はこれを再確認して、それが本当に不可能であることを確認しました)
前述の投稿のレポーターは、アクティビティクラスでAsyncTaskの内部クラスを作成し、アクティビティクラスからonCreateDialogを操作し、AsyncTaskからshowDialogを呼び出すことで、最終的に解決しました(そして私は他の場所でもこの解決策を読みました)。(これを理解していない場合は彼の投稿を読んでください)私はそれを実装しようとし始めましたが、showDialogが無効になっているようです:これは私にとっての解決策ではありません。
私が見つけた最後の解決策は、単に例外をキャッチすることです。私もそれを自分で考えていましたが、それは最後の手段にすぎませんでした。私は、単に例外をキャッチして何が起こっているのかわからないのではなく、実際に何がうまくいかないのかを理解し、それを予測することを好みます。