如何检查是否有任何后台任务在运行?

时间:2015-10-31 15:40:38

标签: android android-activity android-asynctask

我在android中有一个使用AsyncTask从服务器获取数据的活动,我正在执行如下任务:

new Task.exectue();

问题是对此AsyncTask有多次调用,并且我想在调用onDestroyonBackPressed时取消所有这些调用,我该如何实现?或者作为另一个灵魂,我如何检查活动中是否有任何后台任务?

3 个答案:

答案 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);
        }
    }
}