如果AsyncTask
已被取消,onPostExecute
會執行嗎?onPostExecute取消AsyncTask
如果確實執行,是否可以安全地說,在執行其他操作之前,我應該始終詢問任務是否已在onPostExecute
開始時被取消(isCancelled
)?
如果AsyncTask
已被取消,onPostExecute
會執行嗎?onPostExecute取消AsyncTask
如果確實執行,是否可以安全地說,在執行其他操作之前,我應該始終詢問任務是否已在onPostExecute
開始時被取消(isCancelled
)?
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中檢查空結果。
非常有用的答案! – 2014-03-20 03:15:52
根據我的經驗,當任務被取消時,onPostExecute()實際上不會被調用。但是,在完成任務的doInBackground()之後但在調用onPostExecute()之前可能會取消該任務 - 在這種情況下,實際會調用onPostExecute()。因此,可以肯定的是,我在onPostExecute()中調用isCancelled()方法,如果任務已取消,則只是「返回」。這個對我有用。
這是真的嗎?我的意思是 - 我如何重現它?任何測試代碼或想法呢? – 2012-09-07 09:03:18
檢查AsyncTask源代碼後,即使取消任務,似乎也會調用onPostExecute。但是,在調用onPostExecute之前,如果任務已被取消,則結果將設置爲空(?)。
編輯:@bain提供更新answer。
另請參閱[此問題](http://stackoverflow.com/q/10163763/165674)。 – 2012-04-16 05:10:06