Идеальный способ отменить выполняющийся AsyncTask

Я выполняю удаленные операции воспроизведения выбирающего звуковой файл и звукового файла в использовании фонового потока AsyncTask. A Cancellable индикатор выполнения показывают в течение времени операционные выполнения выборки.

Я хочу отменить/прервать AsyncTask выполненный то, когда пользователь отменяет (отклоняет) операцию. Что идеальный путь состоит в том, чтобы обработать такой случай?

107
задан mghie 29 April 2010 в 06:32
поделиться

3 ответа

Только что обнаружил, что AlertDialogs 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;
    }

    // ...

}
78
ответ дан 24 November 2019 в 03:40
поделиться

Простой: не используйте AsyncTask . AsyncTask предназначен для коротких операций, которые заканчиваются быстро (десятки секунд) и, следовательно, не требуют отмены. «Воспроизведение аудиофайлов» не подходит. Вам даже не нужен фоновый поток для обычного воспроизведения аудиофайлов.

11
ответ дан 24 November 2019 в 03:40
поделиться

Единственный способ сделать это - проверить значение метода isCancelled() и остановить воспроизведение, когда он возвращает true.

4
ответ дан 24 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: