2011-06-09 40 views
12

Estoy un poco confundido en ThreadPoolExecutor. Esto es lo que estoy tratando de lograr:Cómo utilizar AsyncTask con ThreadPoolExecutor

Tengo una vista de lista que se completa con un icono de imagen a la izquierda y una breve descripción a la derecha. Tengo todo el texto ya definido estáticamente, sin embargo, quiero obtener los iconos de la web. Ya sé cómo obtener la imagen de una url, sin embargo, no quiero generar 'n' cantidad de hilos por icono para captar la imagen del icono. Así que leí en threadpoolexecutor para asynctask y no estoy seguro de cómo hacerlo. ¿Pueden ustedes darme una ventaja? ¿Tengo que crear un threadpoolexecutor y usar asynctasks dentro de él?

Mi lista es así ... sin los iconos.

___________________________ 
[icon][a short description] 
____________________________ 
[icon][a short description] 
_____________________________ 
[icon][a short description] 
_____________________________ 
[icon][a short description] 
____________________________ 

Respuesta

8

Recomendaría simplemente usar AsyncTask y no preocuparse por el ThreadPoolExecutor, que requiere HoneyComb de todos modos. AsyncTask tiene un conjunto de subprocesos que se reutilizarán para todos sus elementos de lista. No creará un montón de hilos por icono.

Solo tenga en cuenta que sus tareas se ejecutarán en paralelo en Android 2.x y para realizar un seguimiento de los problemas de sincronización que pueda tener su código.

+0

Cuando hago un Log.d (TAG, "Creado") en mi tarea asíncrona, se muestra que se crean 'n' cantidades de hilos. Entonces, ¿qué estás diciendo que, aunque están creados, Async tiene una forma interna de controlar su grupo de hilos? – HAxxor

+0

Necesita crear una nueva instancia de AsyncTask para cada tarea que tenga y ejecutarla. No deberías reutilizar esas instancias. AsyncTask administra un grupo de subprocesos y todas las tareas comparten ese grupo. –

+4

@StevePrentice Según la documentación [ThreadPoolExecutor] (http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html) está disponible desde el nivel 1 de la API. Siento que es la mejor solución. –

4

Usted tendrá que utilizar el método executeOnExecutor() para comenzar con su propio ejecutor.

Parece haber un número de errores, por lo tanto, lea cuidadosamente toda la página para AsyncTask.

Así que sí, puede crear su propio ThreadPoolExecutor y usarlo con AsyncTask.

+0

¡Gracias, miren más adentro! Parece bastante molesto usar .. lol – HAxxor

+0

Sin embargo, eso no está disponible para niveles de API inferiores a 11 – rallat