2010-07-26 11 views
23

¿Se ejecuta onPostExecute si se ha cancelado AsyncTask?onPostExecute en AsyncTask cancelado

Si se ejecuta, ¿es seguro decir que siempre debo preguntar si la tarea se ha cancelado (isCancelled) al comienzo de onPostExecute, antes de hacer cualquier otra cosa?

+0

Vea también [esta pregunta] (http://stackoverflow.com/q/10163763/165674). –

Respuesta

63

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

Android 2.3.7 onPostExecute:

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

Android 4.0.1 onPostExecute:

ejecuta en el hilo de interfaz de usuario después de doInBackground. El resultado especificado es el valor devuelto por doInBackground. Este método no se invocará si se canceló la tarea .

Por lo tanto, si todavía tiene como objetivo dispositivos Android 2, debe suponer que se llamará aPostExecute y en la comprobación de Post Excepto para el resultado nulo.

+3

¡Respuesta extremadamente útil! –

7

Desde mi experiencia, el onPostExecute() en realidad no se invoca cuando se cancela la tarea. Sin embargo, es posible cancelar la tarea una vez finalizado doInBackground() de la tarea pero antes de que se invoque onPostExecute(); en este caso, se invoca onPostExecute(). Por lo tanto, para estar seguro, llamo al método isCancelled() en onPostExecute() y simplemente "return" si la tarea ha sido cancelada. Esto funciona para mi.

+1

¿Es realmente cierto? Quiero decir, ¿cómo puedo reproducirlo? ¿Algún código de prueba o idea sobre esto? –

5

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

Editar: @bain proporciona una actualización answer.

Cuestiones relacionadas