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?
- Cordova plugin bloqueo de hilo
- Programación de procesos Android
- Pruebas de unidad de Android con múltiples subprocesos
- Iniciar un servicio en un proceso separado android
- ProgressDialog animaciones pausas en grandes setText ()
- Acceso al controlador de subprocesos de interfaz de usuario desde un servicio
- IntentService y Threadpool
- Thread.sleep detiene todas las Asyntasks anidadas
- Actualizaciones de interfaz de usuario de subprocesos en Android
- Android - progressdialog no se muestra en AsyncTask
- ¿Puede ocurrir la inversión de prioridad en Android?
- Cargando imagen de forma sincrónica con Glide
- ¿En qué hilo se ejecuta onReceive () de un BroacastReceiver registrado con LocalBroadcastManager?
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.