ダイアログ表示でBadTokenExceptionが出る
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( getApplicationContext() );
例えばhogeActivity内で、上記のようにAlertDialogを作成する処理を書くと、
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
というエラーが出て落ちてしまう。
で、エラー名でぐぐった
ダイアログ表示時(Dialog#show)にBadTokenException
上記ブログ様によるとサービスのコンテキストでダイアログは表示できないらしい。
サービスとはなんぞや。
Androidで動く携帯Javaアプリ作成入門(7)常駐アプリが作成できるAndroidの“サービス”とは
むむむ…よくわからない。
バックグラウンドで動かし続けたい処理なんかに使うみたい。
なぜgetApplicationContext()で取得したコンテキストが、サービス扱いなのかよくわからないが、
以下のようにしたらエラー落ちしないで正常っぽく動いた。
hogeActivity.java
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( hogeActivity.this );
とあるプロジェクトで、前任者がこう書いていたものをマネした。
自分自身のクラス(アクティビティクラス)をコンテキストとして渡している。
しかしこの書き方では、参照が残るとかなんとか
Androidアプリのメモリリークを調査する
上記ブログ様の記事、「Contextに注意」の項目でActivity.thisが登場している。
getApplicationContext()を使うと参照が残らない…のか?
知識不足で全然理解していないので、もっと勉強が必要ですね。。