112 votos

AsyncTask hilos nunca mueren (Android)

Soy nuevo en programación en Android y estoy usando AsyncTasks para recuperar los datos en respuesta al usuario pulsar un botón. Esto funciona bien y mantiene la interfaz sensible, mientras que la captura de los datos, pero cuando comprobé lo que estaba pasando en el depurador de Eclipse, me enteré de que cada vez que una nueva AsyncTask fue creado (que es bastante a menudo, ya que sólo pueden usarse una vez), un nuevo hilo estaba siendo creado, pero nunca terminada. El resultado es un gran número de AsyncTask hilos de allí sentado. No estoy seguro de si esto es un problema en la práctica o no, pero realmente me gustaría deshacerse de los subprocesos adicionales. ¿Cómo puedo matar a estos hilos?

Gracias!

200voto

CommonsWare Puntos 402670

AsyncTask maneja un grupo de subprocesos, creado con ThreadPoolExecutor. Va a tener de 5 a 128 hilos. Si hay más de 5 hilos, los hilos se queda en la mayoría de los 10 segundos antes de ser eliminado. (nota: estas cifras son para la actualidad-visible, de código abierto y varían según la versión de Android).

Salir de la AsyncTask hilos solo, por favor.

24voto

Tom de Waard Puntos 283

Además CommonsWare respuesta:

Actualmente estoy usando Android 2.2, y mi aplicación no utiliza más de un AsyncTask en cualquier momento, pero yo estoy creando uno nuevo cada x minutos. En el primero de los nuevos AsyncTask Hilos comienzan a aparecer (un nuevo Hilo para un nuevo AsyncTask), pero después de 5 hilos (como se ha mencionado por CommonsWare) que sólo permanecen visibles en la ventana de depuración, y volver a utilizarse cuando nuevas AsyncTask hilos son necesarios. Se quedan ahí hasta que el depurador se desconecta.

3voto

karnbo Puntos 41

Síntoma mismo de aquí. En mi caso los hilos colgados alrededor después de que yo había matado a la Actividad, y tenía la esperanza de que la Aplicación se cierre por completo. Problema resuelto en parte por el uso de un solo subproceso ejecutor:

    myActiveTask.executeOnExecutor(Executors.newSingleThreadExecutor());

Esto hizo que el hilo a desaparecer después de la finalización de su trabajo.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X