2012-12-06 51 views
0

AsncTask取消時會發生什麼情況。Android - asnctask取消時會發生什麼?

它還會調用onPostExecute()

+1

我希望你能閱讀下列不錯的答案得到你的答案,有一兩件事我想說按我的經驗(和按文件),如果你取消你的任務則不能保證doInBackground將停止其因此它在執行doInBackground中的任何新行之前檢查isCancelled()是一種很好的做法 – rajpara

回答

3

來自官方的Java文檔:

任務可以在任何時候通過調用取消(布爾)被取消。 調用此方法將導致後續調用isCancelled()至 返回true。 調用此方法後,將在 doInBackground(Object [])返回後調用onCostlled(Object),而不是 onPostExecute(Object)。爲了確保任務是儘快取消 ,應始終從doInBackground檢查 isCancelled(返回值)定期(對象[]),如果可能的話 (例如一個循環中。)

和方法Java文檔:

public final boolean cancel (boolean mayInterruptIfRunning) 

試圖取消對此任務的執行。如果 任務已完成,已被取消或因其他原因不能取消 ,此嘗試將失敗。如果成功,並且此任務有 在調用取消時未啓動,則此任務不應運行。如果 任務已經啓動,則mayInterruptIfRunning參數 將確定執行此任務的線程是否應在嘗試停止任務時中斷 。

調用此方法將在doInBackground(Object [])返回後在UI線程上導致onCancelled(Object)被調用 。 調用這個 方法保證不會調用onPostExecute(Object)。 調用此方法後,應該儘早檢查由doInBackground(Object [])定期檢查由 isCancelled()返回的值以儘快完成 任務。

4

答案是NO 。如醫生說:

public final boolean cancel (boolean mayInterruptIfRunning)

調用此方法保證onPostExecute(對象)是從未 調用。調用此方法後,應該定期從doInBackground(Object []) 中檢查由isCancelled()返回的值 ,以儘早完成任務。

相關問題