2011-03-07 15 views
21

Creo que sé la respuesta a esto, pero ¿una AsyncTask continúa a vivir una vez que su actividad de llamada ha sido finish() ed?Si se mata una actividad, ¿vive la AsyncTask?

protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "Your data is processing.", Toast.LENGTH_LONG); 
     finish(); 
    } 

Editar: Hasta ahora dos diferentes respuestas :)

Respuesta

13

La AsyncTask está vinculada a un subproceso de UI y, si la Actividad finaliza, la tarea asincrónica se cancela.

[actualizar] - El comentario de Hackbod a continuación es correcto. Cabe señalar que las AsyncTasks deben ser de corta duración y, por lo tanto, no preocuparse tanto por este problema. Un AsycTask solo se ha ido realmente cuando se completa O el proceso se cancela, lo que puede ocurrir o no después de que se invoca el acabado.

+0

Creo que tiene razón (como se indica en los documentos): http://developer.android.com/reference/android/os/AsyncTask.html#Class_Overview –

+41

Esa redacción no es tan buena. AsyncTask es completamente independiente de una Actividad; tienes que gestionarlos juntos. Una actividad * finalizada * no le hace nada a ninguna tarea asíncrona, a menos que las limpie desde onDestroy(). Por otro lado, si el proceso de una actividad se está matando mientras está en segundo plano, entonces la AsyncTask también se eliminará también, como parte de la desaparición del proceso completo. – hackbod

+0

, ¿necesitamos comprobar si la actividad todavía está activa antes de realizar cambios en la interfaz de usuario dentro de _onPostExecute() _? – Reek

1

Se sigue funcionando hasta que los onPostExecute acabados.

1

He experimentado algunas rarezas con las tareas de Async, donde si el OS cancela una actividad y cuando se reanuda la aplicación, las tareas de AsyncTasks a veces no se ejecutan en absoluto. No estoy seguro de por qué entran en este estado. Si ejecuta AsyncTasks en su propio subproceso ejecutor, esto no sucede. Me podría encontrar con alguna circunstancia extraña. Pensé que podría ser útil publicar aquí de todos modos :).

+0

Estoy teniendo el mismo problema. cuando reanudo el asynkTask no funciona. cómo resolver esto – dmSherazi

+0

Perdón por la respuesta tardía. Mi solución, como mencioné anteriormente, fue usar un ejecutor y pasar el AsyncTask a él. El método que está buscando es AsyncTask.executeOnExecutor() - ¿Espero que ayude? – dineth

0

La tarea asincrónica continúa ejecutándose hasta que finaliza el onPostExecute().

pruébelo poniendo un brindis en finish() y onPostExecute() para ver qué brindis se muestra primero.

0

Asynctask no están limitados a ningún método de ciclo de vida de la actividad o servicio.

Sigue ejecutándose en un hilo separado hasta que onPostExecute() se ejecuta en el hilo principal.

0

Las tareas asincrónicas no tienen ningún efecto en el ciclo de vida de la actividad ni en ningún cambio de configuración. Siguen funcionando hasta que se llama al método PostExecute().

En su lugar, se deben usar los Servicios para operaciones de larga ejecución.

Cuestiones relacionadas