这里,我试图从服务器获取数据并全部设置为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();
}
我将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;
。