2011-11-04 47 views
0

的方法根據文獻here詢問取消的AsyncTask

調用此方法會導致onCancelled(Object)將UI線程上被調用後doInBackground(對象[])返回

然而,在我的情況下onCancelled(Object)在我調用cancel方法後被調用。我的問題:文檔是否錯誤?

回答

0

正常執行的AsyncTask可以處於四種狀態:尚未執行,正在執行,已完成並已取消。如果任務已完成或取消,cancel()方法不起作用。如果任務正在執行,則在調用onCancelled()之前,必須完成doInBackground()。但是,如果任務尚未開始執行,將立即調用onCancelled(),您將無法執行任務。

+0

謝謝您的回覆。我的情況與您的opion不一樣。 doInbackground已開始。它在10秒內計入1-10。當它數到5時,我呼叫取消。日誌顯示onCancelled調用。但是,doInbackground任務繼續到10,現在它返回。 – teddy

0

我經歷了類似的問題。調用cancel()後,我的任務繼續運行。這對於Android 2.2和2.3是有效的。我最終定期檢查doInBackground中的isCancelled()。行爲是相同的,你可以調用cancel(true)或cancel(false)。