OnPostExecute en AsyncTask cancelado

¿ onPostExecute ejecuta onPostExecute si se ha cancelado el AsyncTask ?

Si se ejecuta, ¿es seguro decir que siempre debería preguntar si la tarea ha sido cancelada ( isCancelled ) al principio de onPostExecute , antes de hacer algo más?

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

Android 2.3.7 onPostExecute :

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

Android 4.0.1 onPostExecute :

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

Por lo tanto, si todavía está buscando dispositivos Android 2, debe asumir que se llamará onPostExecute y en onPostExecute compruebe si hay resultado nulo.

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

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 onPostExecute el resultado se establece en null (?) Si la tarea se ha cancelado.

Editar: @bain proporciona una respuesta actualizada.

  • ¿Cómo puedo implementar un Timer / TimerTask que ejecuta un AsyncTask? (Androide)
  • El servicio de Android comienza de forma automática / automática
  • Anotaciones de método Android para evitar que la llamada se realice en el subproceso de GUI
  • Prueba unitaria de interfaz de usuario asíncrono con Espresso, IdlingResource falla con condición de carrera
  • Android y Java: uso de runnable
  • AIDL vs Messenger
  • ¿Cómo implementar un ProgressDialog mientras que Activity solicita un SoapObject desde un Servicio Web?
  • ¿Cómo ajustar Delay for loop in android?
  • Multithreading en Android
  • ¿Por qué la mayoría de los marcos de la interfaz de usuario se subproceso único?
  • Android: ¿Dejar de usar Looper?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.