studio publishprogress oncancelled example clase cancel asynctask android multithreading android-asynctask

publishprogress - execute asynctask android



onPostExecute en AsyncTask cancelado (3)

¿ onPostExecute ejecuta onPostExecute si se ha cancelado AsyncTask ?

Si se ejecuta, ¿es seguro decir que siempre debo preguntar si la tarea se canceló (se isCancelled ) al inicio de onPostExecute , antes de hacer algo más?


Desde mi experiencia, onPostExecute () en realidad no se invoca cuando se cancela la tarea. Sin embargo, puede ser posible cancelar la tarea después de que finalice el doInBackground () de la tarea pero antes de que se invoque onPostExecute (), en este caso se invoca realmente onPostExecute (). Por lo tanto, para estar seguro, llamo al método isCancelled () en onPostExecute () y simplemente "regresa" si la tarea ha sido cancelada. Esto funciona para mi.


Después de verificar el código fuente de AsyncTask, parece que se invoca onPostExecute incluso si se cancela la tarea. Sin embargo, antes de llamar a onPostExecute, el resultado se establece en nulo (?) Si la tarea se ha cancelado.

Editar: @bain proporciona una answer actualizada.


El comportamiento documentado de onPostExecute en cancel () se cambió entre Android 2 y Android 4.

Android 2.3.7 onPostExecute :

Se ejecuta en el hilo de la interfaz de usuario después de doInBackground. El resultado especificado es el valor devuelto por doInBackground o nulo si la tarea se canceló o si se produjo una excepción.

Android 4.0.1 onPostExecute :

Se ejecuta en el hilo de la interfaz de usuario después de doInBackground. El resultado especificado es el valor devuelto por doInBackground. Este método no será invocado si la tarea fue cancelada.

Por lo tanto, si aún está apuntando a dispositivos Android 2, debe asumir que se llamará a onPostExecute y en onPostExecute verifique el resultado nulo.