onPostExecute
在AsyncTask
被取消时是否执行?
如果它执行了,那么我是否应该始终在onPostExecute
开始之前询问任务是否被取消(isCancelled
),然后再执行其他操作?
onPostExecute
在AsyncTask
被取消时是否执行?
如果它执行了,那么我是否应该始终在onPostExecute
开始之前询问任务是否被取消(isCancelled
),然后再执行其他操作?
在Android 2和Android 4之间,onPostExecute在cancel()方法上的文档记录行为已更改。
在doInBackground之后在UI线程上运行。指定的结果是由doInBackground返回的值,如果任务被取消或发生异常,则为空。
在doInBackground之后在UI线程上运行。指定的结果是由doInBackground返回的值。如果任务被取消,则不会调用此方法。
因此,如果您仍然针对Android 2设备,则应假定将调用onPostExecute,并在onPostExecute中检查null结果。
根据我的经验,当任务被取消时,实际上不会调用onPostExecute()方法。但是,在任务的doInBackground()方法完成之后,但在onPostExecute()方法被调用之前,可能会取消任务 - 在这种情况下,实际上会调用onPostExecute()方法。因此,为了确保,我在onPostExecute()方法中调用isCancelled()方法,如果任务已被取消,就只需“返回”。这对我很有效。
在检查AsyncTask源代码后,似乎即使任务被取消,也会调用onPostExecute。但是,在调用onPostExecute之前,如果任务已被取消,则结果将设置为null (?)。
编辑:@bain提供了更新的答案。