2012-07-24 59 views
4

在完成onPostExecute()时可以取消AsyncTask吗?取消ASyncTask

或者一旦doInBackground()完成后该任务不能再被取消?

回答

5

从我所了解的任务只运行在doInBackground()状态,onPostExecute()意味着任务已完成且无法取消。

cancel()尝试取消执行此任务。如果任务已完成,已被取消或因其他原因无法取消,此尝试将失败。如果成功,并且此任务在调用取消时尚未开始,则此任务不应运行。如果任务已经开始,那么mayInterruptIfRunning参数确定执行此任务的线程是否应该被中断以试图停止任务。

调用此方法将导致在doInBackground(Object[])返回后在UI线程上调用onCancelled(Object)。调用此方法可确保从不调用onPostExecute(Object)。调用此方法后,应该定期从doInBackground(Object[])中检查isCancelled()返回的值,以尽早完成任务。

+0

感谢我希望这是事实。 – enifeder 2012-07-24 06:39:26

1

覆盖onCanceled()方法,请参阅下面的示例代码:

private class UpdateTask extends AsyncTask<Void, Void, Void> { 

    private boolean running = true; 

    @Override 
    protected void onCancelled() { 
     running = false; 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
     onUpdate(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     while(running) { 
      publishProgress(); 
     } 
     return null; 
    } 
} 
+0

你似乎误解了这个问题。我并没有问如何使用AsyncTask,而是更多地关注其内部工作。 – enifeder 2012-07-24 06:34:48