2012-04-23 12 views
6

Necesito combinar dos listas, cada una de las cuales se devuelve después de su propia llamada Async. ¿Cómo se coordinan mejor las llamadas Async como estas? ¿Hay algún método SDK estándar para esperar hasta que se complete otra tarea asíncrona?Android Cómo sincronizar dos tareas asincrónicas?

+0

¿Qué hay de combinar el trabajo de ambas tareas asíncronas en una sola? – dmon

+0

O utilizando AsyncTask.executeOnExecutor (singleThreadPoolExecutor), maneje la ejecución de colas. – yorkw

Respuesta

0

Java tiene algunas cosas agradables, como la clase Futuro y los gustos. No sirve de nada describir este marco aquí hay muchos recursos en la red. Sin embargo, puede ser mejor tener una sola tarea asíncrona, de todos modos no hay necesidad de ejecutar dos tareas asíncronas al mismo tiempo. Puede hacer las dos partes en una sola doInBackground

5

execute() llamada devuelve una instancia de AsyncTask, puede guardar esta instancia para comprobar más tarde, si la tarea ha terminado o no llamando getStatus(), por lo que el código se vería así:

final AsyncTask<...> first_task; 
final AsyncTask<...> second_task; 

public someMethod() { 
    first_task = new MyFirstAsyncTask().execute(); 
    second_task = new MySecondAsyncTask().execute(); 
    // other things 
} 

private class MyFirstTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(second_task != null && second_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

private class MySecondTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(first_task != null && first_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

y la tarea, que termina por último, puede iniciar la nueva tarea para combinar los resultados.

0

Eso realmente depende de la necesidad.

¿Necesita esperar todos los datos para llegar? Si no solo haga una llamada a su función con función de bloqueo sincronizado en su actividad

En caso afirmativo, ¿espera que funcionen solo una vez; por lo tanto, dos (o X) en total? tal vez pueda verificar: CoundDownLacth (http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)

Cuestiones relacionadas