Tengo un AsyncTask que cierro en el evento del ciclo de vida onPause de Activity, por lo que no se ejecuta cuando alguien abandona la aplicación, pero continúa a pesar de esto. Agregué un seguimiento y este fragmento muestra el problema.Android AsyncTask no se detendrá cuando se cancele, ¿por qué?
Trace.d(TAG,"Task state: " + myTask.getStatus());
myTask.cancel(true);
Trace.d(TAG,"Task state: " + myTask.getStatus());
Salidas:
Task state: RUNNING
Task state: RUNNING
¿Por qué el cancel() método no tiene ningún efecto sobre el estado de la tarea? Noté que los documentos dicen que el método cancelar "intentará" detener la tarea, pero ¿bajo qué circunstancias fallará? La tarea se está ejecutando definitivamente ya que está produciendo salida de registro cada diez segundos, y como puede ver arriba, su estado se devuelve como en ejecución.
Actualización: Agregué el rastreo para mostrarme el estado isCancelled() también y eso SI cambia. Por lo tanto, la llamada para cancelar (verdadero) está cambiando el estado cancelado de falso a verdadero, pero aparentemente no tiene ningún efecto en el estado o detiene el hilo.
¿Hay alguna manera de que el ciclo dentro de su tarea verifique si la tarea se ha cancelado y simplemente salga del ciclo? –
¿Cuál es el valor de retorno de cancelar? ¿Te dijo que lo canceló? –
@Joel Sí, puedo hacer eso, pero como uso el método cancel() en otros lugares, quiero entender por qué no está haciendo lo que esperaba –