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

Android 如何检查是否有任何后台任务正在运行?,android,android-activity,android-asynctask,Android,Android Activity,Android Asynctask,我在android中有一个活动,它使用AsyncTask从服务器获取数据,我运行的任务如下: new Task.exectue(); 问题是有多个调用此AsyncTask,我想在调用onDestroy或onBackPressed时取消所有调用,我如何实现这一点?或者作为另一个解决方案,我如何检查活动中是否有任何后台任务正在运行 默认情况下,AsyncTask连续执行许多任务。这意味着当第一个任务完成时,它将开始下一个任务,依此类推。你能做的就是 全局变量: private Task myTas

我在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");
}
方法:

private Task myTask;
public void accessWebService(){
   myTask = new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "Param 1");
}

然后在
ondestory
中取消任务。

默认情况下
AsyncTask
连续执行许多任务。这意味着当第一个任务完成时,它将开始下一个任务,依此类推。你能做的就是

全局变量:

private Task myTask;
public void accessWebService(){
   myTask = new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "Param 1");
}
方法:

private Task myTask;
public void accessWebService(){
   myTask = new Task().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "Param 1");
}

然后在
ondestory
中取消任务。

如何检查活动中是否有后台任务运行?

   boolean isTaskRunning =  asyncTaskObj.getStatus().equals(AsyncTask.Status.RUNNING) ;
如果要取消该任务,请使用以下代码:

asyncTaskObj.cancel(true);

如何检查活动中是否有任何后台任务运行?

   boolean isTaskRunning =  asyncTaskObj.getStatus().equals(AsyncTask.Status.RUNNING) ;
如果要取消该任务,请使用以下代码:

asyncTaskObj.cancel(true);

有一个任务列表,当您想取消它们时,只需在列表中迭代并对每个任务调用.cancel():

private ArrayList<Task> mTasks = new ArrayList<>();
在任务的onPostExecute()方法结束时,将其从列表中删除:

mTasks.add(new Task.exectue());
@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);
        }
    }
}

有一个任务列表,当您想取消它们时,只需在列表中迭代并对每个任务调用.cancel():

private ArrayList<Task> mTasks = new ArrayList<>();
在任务的onPostExecute()方法结束时,将其从列表中删除:

mTasks.add(new Task.exectue());
@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);
        }
    }
}

可能重复:@Bubu您是否建议我每次运行任务时都将其添加到列表中?请知道,我并不是用一个对象引用每个任务调用,我总是在使用新任务。执行,我不知道这个任务会被调用多少次,可能一次,可能一万次。是的,当你想取消它们时,你要遍历你的列表,检查异步任务是否正在运行,并为每个异步任务取消它。如果你有一万个异步任务并行运行,这是另一个问题,你可能不得不用另一种方式来完成你的工作:)@bubuhaha不,我不是说真的有一万个呼叫,只是用户可以点击同一个按钮,任意调用任务。可能重复:@Bubu你是不是建议我每次运行任务时都将其添加到列表中?请知道,我并不是用一个对象引用每个任务调用,我总是在使用新任务。执行,我不知道这个任务会被调用多少次,可能一次,可能一万次。是的,当你想取消它们时,你要遍历你的列表,检查异步任务是否正在运行,并为每个异步任务取消它。如果你有一万个异步任务并行运行,这是另一个问题,你可能不得不用另一种方式来完成你的工作:)@bubuhaha不,我不是说真的有一万个呼叫,只是用户可以点击同一个按钮调用任意多个任务。如果每次使用新任务而不将其附加到对象上,我如何在onDestroy中取消它?如果每次使用新任务而不将其附加到对象上,我如何在onDestroy中取消它?我知道该方法,但我不引用使用对象调用,这意味着我没有asyncTaskObj,我总是使用new Task.execute()我知道该方法,但我没有使用对象引用调用,这意味着我没有asyncTaskObj,我总是使用new Task.execute()