Tengo una situación en la que tendré que hacer seis llamadas http a mi servidor para obtener los datos de seis elementos diferentes. Estas llamadas al servidor no se pueden combinar y deben ser así. Por ejemplo: si necesita información de presupuesto para GOOGLE, envíe una solicitud al servidor solicitando la información de presupuesto de Google. Luego, si necesita yahoo, inicia otra llamada http y así sucesivamente.Cómo administrar múltiples tareas de Async de manera eficiente en Android
Aquí está la situación:
- Ahora mi usuario final quiere comparar 6 empresas diferentes.
- Como mencioné es inevitable para mí hacer 6 llamadas http para las cuales hago uso de 6 tareas asincrónicas.
- Al obtener cada una de las respuestas de la tarea Async, actualizaré la UI con nuevos datos.
- Es una mala experiencia de interfaz de usuario si actualizo la interfaz de usuario 6 veces en un período de tiempo muy corto.
- Da un efecto de parpadeo a mi interfaz de usuario que no se desea.
Mi Pregunta:
- ¿Cómo puedo sostener-off de la actualización de la interfaz de usuario hasta que tenga todas las respuestas 6 asíncrono tarea?
- Entiendo que cada tarea es independiente la una de la otra. ¿Debo ejecutar un ciclo while y esperar hasta obtener todas las respuestas?
- ¿Hay una manera mejor de hacer esto en lugar de un ciclo while porque si alguno de la llamada no responde me quedaré esperando por siempre.
Nota: Creo que Android 1.6+ ejecuta tareas Async en paralelo.
Esto es más una pregunta de diseño y agradecería cualquier ayuda en esto.
Gracias de antemano
Creo que este enfoque no sería apropiado para una actividad ya que el método CountDownLatch await se bloquearía hasta que se completaran todas las tareas y no se debería bloquear el hilo de UI. – AndroidGuy
CountDownLatch se encuentra en la AsyncTask principal que genera tareas secundarias para realizar el trabajo real. Una vez que se completan todas las tareas secundarias, la Tarea principal consolida todos los resultados y regresa al subproceso UI – AKh
¿Cómo funciona esto en Android? –