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) | 株式会社ランチェスター