2010-04-28 11 views
15

¿Qué sucede en Activity.finish() con una AsyncTask ejecutándose en segundo plano?¿Qué sucede en Activity.finish() con AsyncTask ejecutándose en segundo plano?

¿Aparece la actividad de la pila de actividades, pero espera para destruir el objeto Activity hasta que la AsyncTask se complete por completo (ya que AsyncTask es una clase interna de mi actividad)?

Además, ¿actuaría de manera diferente si la AsyncTask fuera una clase pública, no interna que no tuviera referencias a la instancia de la Actividad?

Respuesta

11

He intentado lo mismo con el subproceso, y mi observación es que sigue ejecutando el hilo.

+17

Sí, el 'AsyncTask' seguirá ejecutándose hasta su finalización. Retendrá una referencia a la "Actividad", evitando que la "Actividad" sea recogida de basura ... a menos que sea una clase interna estática o una clase totalmente independiente que no haga referencia a la "Actividad" o cualquier cosa que apunte a la 'Actividad' (por ejemplo, una' Vista'). – CommonsWare

+0

@CommonsWare, pero entonces, ¿qué sucede si se invoca uno de los métodos 'AsyncTask' que se ejecuta en el subproceso de la interfaz de usuario y manipula las vistas de la interfaz de la actividad, invocando métodos de la actividad como' findViewById (R.id.something_in_the_activity_layout) '? ¿Todavía funciona o falla silenciosamente? –

+0

@GianniCostanzi: Es imposible responder en abstracto, lo siento. – CommonsWare

Cuestiones relacionadas