WebViewでProgressDialogを出す場合の注意

AndroidのWebViewでProgressDialogを出すときに以下のようなエラーがでることがあったので調査

android.view.WindowManager$BadTokenException: Unable to add window ? token android.os.BinderProxy@44e04f18 is not valid; is your activity running?
  • isFinishing()でActivityが有効になっているかチェック

何にも考えずに dialog.show() みたいなことをするとエラーが出た
isFinising()で対象のActivityがちゃんと有効な状態になっているかを確認してから dialog.show() する

if (!isFinishing()) {
	dialog.show();
}
  • new ProgressDialog()に渡す引数はActivityを渡してあげる

これも色々なところで書いてあったんだけど、getContext() とかでとってきたものを渡すとダメらしい

public void onCreate(Bundle savedInstanceState) {
	// this とかちゃんとActivityを継承しているものを渡してあげる
	ProgressDialog progress = new ProgressDialog(this);
}
  • 参考にしたページ

【Android】WebViewで読み込み中にダイアログを表示する(2)
Androidアプリサービス開発者ブログ:android.view.WindowManager$BadTokenException について
Dialogを表示しようとしてWindowManager$BadTokenExceptionが出る場合の対処 - Qiita
Day After Neet: AndroidのWebViewをできるだけ早く表示する(UI編)
Android 処理待ちダイアログの設定(ProgressDialog) | 株式会社ランチェスター