次のように、非同期接続を行うアクティビティがあります。
new Thread(new Runnable() {
public void run() {
try{
//Make Connection
}catch(Exception e){
runOnUiThread(new Runnable() { public void run() {
Dialogs.showErrorDialog(MyActivity.this); //I display an error dialog using this context
} });
}
}
}).start();
接続が非常に遅く、このスレッドを開始したアクティビティを終了したとします。最終的に接続が成功した場合はすべて問題ありませんが、接続が失敗した場合は、コンテキストが存在しなくなるため、ダイアログの起動時にクラッシュします。エラーは次のとおりです。
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4068a558 is not valid; is your activity running?
このエラーを回避するにはどうすればよいですか? 私のアクティビティがまだ生きているかどうかを検出したい
1)このコンテキストでダイアログを表示します(まだ画面にいる場合)
2) ApplicationContext でトーストを表示する (画面の外にいる場合)
編集: ダイアログ コードは次のとおりです。
static public void showErrorDialog(Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.error_title);
builder.setMessage(R.string.error_content);
builder.setPositiveButton(R.string.button_ok,null);
builder.show();
}