2010-07-26 181 views
23

如果AsyncTask已被取消,onPostExecute會執行嗎?onPostExecute取消AsyncTask

如果確實執行,是否可以安全地說,在執行其他操作之前,我應該始終詢問任務是否已在onPostExecute開始時被取消(isCancelled)?

+0

另請參閱[此問題](http://stackoverflow.com/q/10163763/165674)。 – 2012-04-16 05:10:06

回答

63

onPostExecute對取消的記錄的行爲()中的溶液的Android 2和Android 4.

Android 2.3.7 onPostExecute之間改變:

奔跑doInBackground後在UI線程上。指定的結果是doInBackground返回的值 ,如果任務被取消,則返回null 或發生異常。

Android 4.0.1 onPostExecute:doInBackground之後的UI線程上

上運行。指定的結果是由doInBackground返回的值 。如果 任務被取消,則不會調用此方法。

因此,如果您仍然定位到Android 2設備,則應該假定將調用onPostExecute並在onPostExecute中檢查空結果。

+3

非常有用的答案! – 2014-03-20 03:15:52

7

根據我的經驗,當任務被取消時,onPostExecute()實際上不會被調用。但是,在完成任務的doInBackground()之後但在調用onPostExecute()之前可能會取消該任務 - 在這種情況下,實際會調用onPostExecute()。因此,可以肯定的是,我在onPostExecute()中調用isCancelled()方法,如果任務已取消,則只是「返回」。這個對我有用。

+1

這是真的嗎?我的意思是 - 我如何重現它?任何測試代碼或想法呢? – 2012-09-07 09:03:18

5

檢查AsyncTask源代碼後,即使取消任務,似乎也會調用onPostExecute。但是,在調用onPostExecute之前,如果任務已被取消,則結果將設置爲空(?)。

編輯:@bain提供更新answer