如何停止从适配器位置执行AsyncTask?

问题描述 投票:0回答:1

这里,我试图从服务器获取数据并全部设置为recylerview。为此,我在每个原始的onClick from下载按钮中使用了Asynctask。运行完美。但我想再添加一个功能,用户可以停止下载过程。

onClick
{
MyTaskParams params = new MyTaskParams(url,time,key,getAdapterPosition(),type);
                            DownloadMedia task=new DownloadMedia();
                            stopButton.setVisibility(VISIBLE);
                            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
                                task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
                            else
                                task.execute(params);
}
stopButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                   asyncTask=findAsyncTaskFromRunningMultipleAsyncTask;//how this method implement from viewholder
                   asynctTask.calcel();
                }
java android android-recyclerview android-asynctask
1个回答
0
投票

我将DownloadMedia task设置为实例变量。在类中声明,但在方法之外。

然后在onClick中设置其值:

onClick {
    MyTaskParams params = new MyTaskParams(url, time, key, getAdapterPosition(), type);
    task = new DownloadMedia();
    ...
}

然后在停止按钮上:

stopButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (task != null) {
            task.calcel();
        }
    }
}

然后根据the docs

为了确保尽快取消任务,应始终从isCancelled()定期检查doInBackground(java.lang.Object[])的返回值,如果可能的话(例如在循环内)

因此,您应该在asynk任务isCancelled()方法中定期检查doInBackground

do {
    if (isCancelled()) {
        break;
    } else {
       // execute your code
    }
} while (runningExpression);

循环是可选的,但在其他运行操作之间,您应尝试设置尽可能多的if (isCancelled()) break;

© www.soinside.com 2019 - 2024. All rights reserved.