为了账号安全,请及时绑定邮箱和手机立即绑定

取消正在执行的AsyncTask的理想方法

取消正在执行的AsyncTask的理想方法

holdtom 2019-06-28 10:12:32
取消正在执行的AsyncTask的理想方法我在后台线程中运行远程音频文件获取和音频文件回放操作。AsyncTask..一个Cancellable在FETCH操作运行时显示进度条。我想取消/中止AsyncTask当用户取消(决定反对)操作时运行。处理这类案件的理想方法是什么?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

如果你在计算:

  • 你得检查一下

    isCancelled()

    周期性的。

如果您正在执行HTTP请求:

  • 保存

    HttpGet

    HttpPost

    某处(如:(公共领域)。
  • 打电话后

    cancel

    ,打电话

    request.abort()

    ..这将导致

    IOException

    被扔进你的

    doInBackground.

在我的例子中,我有一个连接器类,用于各种AsyncTask中。为了保持简单,我添加了一个新的abortAllRequests方法,并在调用cancel.


查看完整回答
反对 回复 2019-06-28
?
郎朗坤

TA贡献1921条经验 获得超9个赞

问题是,AsyncTask.Canc.Cancel()调用只调用任务中的onCancel函数。这就是要处理取消请求的地方。

下面是我用来触发更新方法的一个小任务

private class UpdateTask extends AsyncTask<Void, Void, Void> {

        private boolean running = true;

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

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            onUpdate();
        }

        @Override
        protected Void doInBackground(Void... params) {
             while(running) {
                 publishProgress();
             }
             return null;
        }
     }


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 652 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信