J'ai besoin de combiner deux listes dont chacune est retournée après son propre appel asynchrone séparé. Comment peut-on mieux coordonner les appels asynchrones comme ceux-ci. Existe-t-il des méthodes SDK standard pour attendre qu'une autre tâche asynchrone soit terminée?Android Comment synchroniser deux tâches asynchrones?
Répondre
Java a quelques trucs sympas comme Future class et les goûts. Il n'est pas utile de décrire ce cadre ici, il y a beaucoup de ressources sur le net. Il est peut-être préférable d'avoir une seule tâche asynchrone, de toute façon il n'est pas vraiment nécessaire d'exécuter deux tâches asynchrones en même temps. Vous pouvez faire les deux parties en une seule doInBackground
execute()
appel renvoie une instance de AsyncTask
, vous pouvez enregistrer cette instance pour vérifier plus tard, si la tâche est terminée ou non en appelant getStatus()
, donc votre code ressemblera à ceci:
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;
}
}
}
et la tâche, qui se termine en dernier, peut démarrer la nouvelle tâche pour combiner les résultats.
Cela dépend vraiment du besoin.
Avez-vous besoin d'attendre toutes les données pour arriver? Si ce n'est pas le cas, appelez votre fonction avec la fonction de bloc synchronisé dans votre activité
Si oui, vous attendez-vous à ce qu'ils ne fonctionnent qu'une seule fois; donc deux (ou X) au total? peut-être vous pouvez vérifier: CoundDownLacth (http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)
- 1. Android: Chargeurs de tâches asynchrones
- 2. Comment synchroniser les méthodes asynchrones?
- 3. SIGSEV en tâches asynchrones sur Xamarin Android
- 4. Implémentation de plusieurs tâches asynchrones
- 5. Test de l'activité Android avec des tâches asynchrones
- 6. Android: deux tâches - deux icônes du lanceur
- 7. Tâches asynchrones séquentielles sans blocage
- 8. Tâches asynchrones pilotées par test
- 9. Comment synchroniser deux méthodes?
- 10. Comment synchroniser deux NSManagedObjectContext
- 11. comment synchroniser deux contrôles?
- 12. Comment synchroniser deux méthodes
- 13. Tâches asynchrones C++. Inclure le problème "Future"
- 14. Comment terminer l'activité lorsque toutes les tâches asynchrones sont terminées
- 15. opération/tâches asynchrones dans WP7/Silverlight
- 16. Comment synchroniser deux dépôts Subversion?
- 17. Synchroniser deux BackgroundWorkers
- 18. Utilisation d'agents pour synchroniser des tâches
- 19. Deux tâches asynchrones dans deux activités différentes s'exécutent en même temps
- 20. Système de tâches asynchrones sur Rails?
- 21. Rails - tâches asynchrones, processus fourchus, bonnes pratiques
- 22. Utilisation de l'annulation avec des tâches asynchrones
- 23. Comment faire une tâche de céleri appeler des tâches asynchrones?
- 24. Synchroniser deux galeries
- 25. deux méthodes Synchroniser Java
- 26. Comment - Tâches asynchrones multiples avec timeout et annulation
- 27. Comment exécute-t-on des tâches asynchrones dans Python 3.4?
- 28. ShellScript synchroniser deux dossiers
- 29. Synchroniser deux imageview src
- 30. JavaFx synchroniser deux services
Qu'en est-il de combiner le travail des deux asynctasks en un seul? – dmon
Ou utilisez AsyncTask.executeOnExecutor (singleThreadPoolExecutor) pour gérer l'exécution de la mise en file d'attente. – yorkw