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