Cuantas AsyncTasks puedo ejecutar en una sola aplicación de proceso

Estoy utilizando asyncTasks, para cargar elementos de la lista con imágenes (sólo seguido android tutorial de la carga eficiente de mapas de bits)

En DDMS, puedo ver hasta 5 AsyncTasks en ejecución

Ahora además he añadido otro AsyncTask, que realiza una cierta decodificación usando la clase de MediaCodec.

Ahora en DDMS, todavía veo 5 AsyncTasks, y mi carga de imagen aynctask o decodificación de tareas asíncronas se ejecuta, no tanto de ellos.

Cuando la decodificación se está ejecutando, si desplácese la lista, las imágenes de los elementos no se actualizan Contrariamente cuando lanzo el nuevo asynctask de la descodificación llamando él es método de la ejecución, la descodificación no comienza, pero si hojeo la visión de la lista ahora, las imágenes se ponen al día .

¿Así que AsyncTask está limitado?

Incluso en listAdapter i lanzar un AsyncTask por llamada getView. Esperaba 7 ejecutar asyncTasks (si la lista de elementos visibles son 7, digamos), pero DDMS muestra sólo 5 asynctasks en ejecución.

¿Ahora alguien puede explicarme cuál es la magia negra que no puedo deletrear?

¿Cuántas AsyncTasks puedes ejecutar a la vez?

En la mayoría de las versiones de Android, la respuesta es 128 .

¿Por qué generalmente verás exactamente 5 hilos AsyncTask ?

AsyncTask gestión de hilos es bastante confuso, sobre todo porque ha cambiado mucho desde la primera versión de Android.

En versiones más recientes de Android, se crean 5 subprocesos de forma predeterminada y el ThreadPoolExecutor intentará ejecutar el AsyncTask en estos 5 subprocesos. Si crea más de 5 AsyncTask s, puede ponerlos en cola o crear nuevos subprocesos (pero sólo hasta 128).

Tenga en cuenta que en las versiones anteriores de Android, estos límites eran diferentes. Creo que, originalmente, sólo había un hilo creado.

Pero todas tus imágenes deberían cargar eventualmente …

Para responder a la otra parte de su pregunta, a menos que esté cargando un montón de imágenes (donde mucho significa> 128), todas las imágenes deben cargarse, aunque probablemente secuencialmente. Si la primera carga 5 y el resto no, eso podría indicar que su función doInBackground() nunca está terminando o que hay algo más malo con el AsyncTask que está utilizando.

Recursos:

Estos son algunos recursos útiles para aprender más sobre la gestión de hilos AsyncTask :

Los hilos AsyncTask nunca mueren

Android AsyncTask límites de los hilos?

¿Hay un límite de AsyncTasks para ejecutarse al mismo tiempo?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.