AsyncTask の実行中に ProgressDialog を表示し、onPostExecute の実行時に AlertDialog を表示しようとするときに発生する問題を特定しました。再現する手順は次のとおりです。
1-タスクを実行する
2-タスクが終了する前にホームボタンを押します
3-タスクが終了したと思われる場合は、アプリに戻ります
4-AlertDialog は表示されず、低輝度 (無効のような) 画面が表示されます。
dialog.dismiss() 行を onPostExecute メソッドの最後に移動すると問題が解決することがわかりました...しかし、これは奇妙ですよね?
ソースコード:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickButton(View view) {
new MyAsyncTask(this).execute();
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void>
{
ProgressDialog dialog;
Context ctx;
public MyAsyncTask(Context ctx) {
this.ctx = ctx;
}
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(ctx);
dialog.setMessage("Loading");
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void value) {
dialog.dismiss();
AlertDialog.Builder alertbox = new AlertDialog.Builder(ctx);
alertbox.setNeutralButton("OK", null);
alertbox.setMessage("Message");
alertbox.setIcon(android.R.drawable.ic_dialog_alert);
alertbox.show();
// dialog.dismiss(); If I remove it from above and put this line here, it will work ok
}
}
}