2012-07-24 50 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