1. ホーム
  2. android

[解決済み] 実行中のAsyncTaskをキャンセルする理想的な方法

2022-10-19 18:40:17

質問

リモートでの音声ファイルの取得と再生操作をバックグラウンドスレッドで AsyncTask . A Cancellable フェッチオペレーションが実行されている間、プログレスバーが表示されます。

をキャンセル/中止したいのですが。 AsyncTask を実行したいのですが、ユーザが操作をキャンセル(拒否)した場合、キャンセル/中止したいです。このような場合、どのように対処するのが理想的でしょうか?

どのように解決するのですか?

今、発見したのですが AlertDialogs 's boolean cancel(...); どこでも使っているのですが、実は何もしないのです。素晴らしい。

というわけで...

public class MyTask extends AsyncTask<Void, Void, Void> {

    private volatile boolean running = true;
    private final ProgressDialog progressDialog;

    public MyTask(Context ctx) {
        progressDialog = gimmeOne(ctx);

        progressDialog.setCancelable(true);
        progressDialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // actually could set running = false; right here, but I'll
                // stick to contract.
                cancel(true);
            }
        });

    }

    @Override
    protected void onPreExecute() {
        progressDialog.show();
    }

    @Override
    protected void onCancelled() {
        running = false;
    }

    @Override
    protected Void doInBackground(Void... params) {

        while (running) {
            // does the hard work
        }
        return null;
    }

    // ...

}