Solicitud de HttpClient simultánea utilizando varias AsyncTasks

Estoy desarrollando una aplicación que requiere varios archivos que se descargan simultáneamente. Estoy creando un AsyncTask con su propio HttpClient para cada archivo, pero el archivo siguiente solamente comienza a transferir después de que el anterior terminó.

¿Podría ser un problema de servidor?

Es porque la administración de AsyncTask ha cambiado en Honeycomb. Anteriormente, si se inició es decir, 3 AsyncTasks, éstos se ejecutaban simultáneamente. Desde HC, si su targetSdk se establece en 12 o superior, éstos se ponen en cola y se ejecutan uno por uno (ver esta discusión ). Para trabajar que alrededor de empezar su AsyncTasks de esa manera:

 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 

en lugar de:

 task.execute(params); 

Si también apuntas a Androids más viejos, necesitas código condicional:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } 

O envolverlo en una clase auxiliar aparte:

 public class Utils { public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task) { executeAsyncTask(task, (P[]) null); } @SuppressLint("NewApi") public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task, P... params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } } } 

Y su uso sería:

 Utils.executeAsyncTask( new MyAsyncTask() ); 

Cuando se introdujo por primera vez, AsyncTasks se ejecutaron en serie en un solo hilo de fondo. Comenzando con DONUT, esto fue cambiado a un grupo de hilos permitiendo que múltiples tareas funcionaran en paralelo. Comenzando con HONEYCOMB, las tareas se ejecutan en un solo hilo para evitar errores comunes de aplicación causados ​​por la ejecución en paralelo. Fuente

Así que dependiendo de la versión AsyncTask no se ejecuta en paralelo. Para tareas como descarga de archivos, debe usar el grupo de subprocesos utilizando Executor

O puede utilizar el método executeOnExecutor ..

Parece que comparte una instancia de HttpClient en toda la aplicación y le da a sus AsyncTasks sus propios métodos. Por el momento, estoy plenamente consciente de que el enlace es para la versión anterior, pero el documento no parece estar actualizado para 4.x.

  • ¿Los BroadcastReceivers de Android comenzaron en un nuevo hilo?
  • Cómo llamar a las actividades de un hilo no actividad?
  • Acceso a multithread Android SQlite
  • Quiero reproducir un audio. ¿Utilizo Thread, AsyncTask o Service?
  • Servicio vs IntentService
  • Android - perfil de un hilo específico (UI Thread) a través de DDMS
  • Android: Leer el HTML de una página web en una cadena
  • cómo leer el flujo de entrada de socket en Android
  • Android: ¿Qué hilo llama .onSensorChanged?
  • Android hilo esperar hasta visible
  • ¿Cómo ejecutar una función cada dos segundos en Java en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.