Home » Android » android – onPostExecute on cancelled AsyncTask

android – onPostExecute on cancelled AsyncTask

Posted by: admin April 23, 2020 Leave a comment

Questions:

Does onPostExecute execute if the AsyncTask has been cancelled?

If it does execute, is it safe to say that I should always ask if the task has been cancelled (isCancelled) at the start of onPostExecute, before doing anything else?

How to&Answers:

The documented behaviour of onPostExecute on cancel() was changed between Android 2 and Android 4.

Android 2.3.7 onPostExecute :

Runs on the UI thread after doInBackground. The specified result is
the value returned by doInBackground or null if the task was cancelled
or an exception occured.

Android 4.0.1 onPostExecute :

Runs on the UI thread after doInBackground. The specified result is
the value returned by doInBackground. This method won’t be invoked if
the task was cancelled.

So if you are still targeting Android 2 devices you should assume that onPostExecute will be called and in onPostExecute check for null result.

Answer:

From my experience the onPostExecute() is actually not invoked when the task is cancelled. However, it may be possible to cancel the task after the task’s doInBackground() is finished but before the onPostExecute() is invoked – in this case the onPostExecute() is actually invoked. Therefore, to be sure, I call the isCancelled() method in onPostExecute() and just “return” if the task has been cancelled. It works for me.

Answer:

After checking the AsyncTask source code it seems that onPostExecute is invoked even if the task is cancelled. However, before calling onPostExecute the result is set to null (?) if the task has been cancelled.

Edit: @bain provides an updated answer.