我在android中有一个使用AsyncTask从服务器获取数据的活动,我正在执行如下任务:
new Task.exectue();
问题是对此AsyncTask有多次调用,并且我想在调用onDestroy
或onBackPressed
时取消所有这些调用,我该如何实现?或者作为另一个灵魂,我如何检查活动中是否有任何后台任务?
答案 0 :(得分:2)
默认情况下AsyncTask
按顺序执行许多任务。这意味着当第一个任务完成时,它会启动下一个任务,依此类推。你能做的是
全局变量:
private Task myTask;
方式:强>
public void accessWebService(){
myTask = new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "Param 1");
}
然后在onDestroy
取消任务。
答案 1 :(得分:1)
如何检查活动中是否有任何后台任务?:
boolean isTaskRunning = asyncTaskObj.getStatus().equals(AsyncTask.Status.RUNNING) ;
如果您要取消该任务,请使用以下代码:
asyncTaskObj.cancel(true);
答案 2 :(得分:1)
列出你的任务列表,当你想要取消它们时,只需遍历列表并在每个任务上调用.cancel():
private ArrayList<Task> mTasks = new ArrayList<>();
每次要执行AsyncTask时,请将实例添加到列表中:
mTasks.add(new Task.exectue());
在您的任务的onPostExecute()方法结束时,将其从列表中删除:
@protected void onPostExecute(Long result) {
...
mTasks.remove(this);
}
最后在你的onDestroy()方法中,取消所有正在运行的AsyncTask:
@Override
onDestroy() {
for(Task task : mTasks) {
if(task.getStatus().equals(AsyncTask.Status.RUNNING)) {
task.cancel(true);
}
}
}