Puis-je chaîner la tâche asynchrone séquentiellement (en commençant une après l'achèvement de la tâche asynchrone précédente)
Chaque fois que je fais un httpRequest
l'écran semble être enfermé pendant quelques secondes, tandis que le code est en cours d'exécution. J'ai donc utilisé AsyncTask
pour faire tous mes httpRequest
trucs dans un thread séparé tout en mettant en place un ProgressDialog
de sorte que l'utilisateur sait ce qui se passe.
J'ai récemment rencontré la situation suivante: l'entrée de l'un de mes httpRequest
dépend le résultat d'un précédent httpRequest
(+parse) d'action. Je ne peux pas juste mettre les deux AsyncTask
s séquentiellement cause Android va les mettre dans deux threads et de commencer à la seconde sans la première s'est terminée. Et sans une entrée appropriée (le résultat de la première httpRequest
), mon deuxième httpRequest
un crash de l'application.
Est-il moyen que je peux mettre dans un wait()
pour forcer la deuxième AsyncTask
de ne pas commencer jusqu'à ce que la première se termine?
source d'informationauteur adjfac
Vous devez vous connecter pour publier un commentaire.
J'ai aussi eu la même situation de l'autre jour.
J'avais résolu de cette façon:
Passer la référence de votre activité pour le constructeur de async classe et d'exécuter le faire en fonction d'arrière-plan. Maintenant en post exécuter la fonction appeler une méthode publique de l'ur de l'activité de async classe pour exécuter la tâche à nouveau... ou essayez ceci:
Acclamations
donc je pense(pas sûr),vous devez appeler deuxième asyncTask sur le post de l'exécution de la méthode
Oui, vous le pouvez. Mais il est seulement possible en
onProgressUpdate()
ouonPostExecute()
. Essayez de le faire comme ceci:De même, vous aurez à mettre
new Task3().execute();
dans leonPostExecute()
méthode de Task2 deAsyncTask
Ne les appelez pas comme ça dans votre code principal. Si vous le faites, alors tous d'entre eux vont courir ensemble:
Référence: AsyncTask
Comment sur l'utilisation de
executOnExecutor
méthode :Suis tombé sur ce thread à la recherche d'une meilleure solution que ce que j'utilise actuellement, mais il semble toujours la meilleure...
Ce que j'ai à faire est de passer un exécutable dans le constructeur de chacune de mes tâches asynchrones.
Soit dans le post exécuter ou à la fin de le faire dans le fond, j'ai lancer ma prochaine tâche, si j'en ai une par l'exécution de l'exécutable.
Cette façon, je peux changeup l'ordre de mes asynctasks par le runnables je passe gardant le code flexible, et si je passe pas praticable ils se terminer normalement. Le runnables juste contenir qu'une seule ligne de l'appel de la prochaine asynctask.
Je n'aime pas le faire tous ceux runnables. Espérais que quelque chose existe, comme dans vb.net pour le chaînage de délégués.
J'ai rencontré ce problème avant. Ce que j'ai fait c'est d'utiliser un appel de retour à l'interface de la classe et appeler sa méthode à l'intérieur de la onPostExecute() la méthode. De cette façon, vous pouvez appeler un autre AsyncTask à partir de la méthode de rappel.