我在Android的一个活动,使用的AsyncTask获取来自服务器的数据,我正在像以下任务:如何检查是否有任何后台任务正在运行?
new Task.exectue();
的问题是有这个的AsyncTask多个呼叫,我想取消所有当他们拨打onDestroy
或onBackPressed
时,我该如何做到这一点?或者作为另一个版本,我如何检查是否有任何后台任务正在运行?
我在Android的一个活动,使用的AsyncTask获取来自服务器的数据,我正在像以下任务:如何检查是否有任何后台任务正在运行?
new Task.exectue();
的问题是有这个的AsyncTask多个呼叫,我想取消所有当他们拨打onDestroy
或onBackPressed
时,我该如何做到这一点?或者作为另一个版本,我如何检查是否有任何后台任务正在运行?
默认AsyncTask
连续执行许多任务。这意味着当第一个任务完成时,它将启动下一个任务,依此类推。你可以做的是
全局变量:
private Task myTask;
方法:
public void accessWebService(){
myTask = new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "Param 1");
}
,然后在onDestroy
取消任务。
当我每次使用新任务时,如何在onDestroy中取消它,而不将它附加到对象上? – EyadMhanna
检查我更新的答案 –
如何检查活动中是否有任何后台任务运行?:
boolean isTaskRunning = asyncTaskObj.getStatus().equals(AsyncTask.Status.RUNNING) ;
如果要取消任务,然后在下面的代码中使用:
asyncTaskObj.cancel(true);
我知道这种方法,但我没有用对象来引用调用,这意味着我没有asyncTaskObj,我总是使用新的Task.execute() – EyadMhanna
有您的任务列表,当你要取消他们只是通过列表迭代,并调用.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);
}
}
}
可能的重复:http://stackoverflow.com/questions/12971882/cancel-all-asynctask – Bubu
@Bubu你是否建议我每次运行一个任务,我将它添加到列表中?请知道,我没有引用每个任务调用的对象,我总是使用新的task.execute,我没有多少次这个任务将被称为可能一次,也许一万。 – EyadMhanna
是的,当你想取消它们时,你遍历你的列表,检查AsyncTask是否正在运行,并取消它的每个asyncTask。如果你有一万个asyncTask并行运行,这是另一个问题,你可能需要以不同的方式完成你的工作:) – Bubu