0

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
    }
}
}
4

0 に答える 0