Android 1.5: AsyncTask méthode doInBackground () pas appelé quand get () est appelée
-
21-09-2019 - |
Question
Je suis en cours d'exécution dans un problème avec la façon dont mes asynctasks sont exécutés. Voici le code de problème:
firstTask = new background().new FirstTask(context);
if (firstTask.execute().get().toString().equals("1")) {
secondTask = new background().new SecondTask(context);
}
Ce que je fais ici est la création d'un nouvel objet AsyncTask, l'assigner à firstTask puis l'exécuter. Je veux ensuite déclencher une AsyncTask séparée lorsque le premier est fait et en vous assurant qu'il renvoie une valeur de succès (1 dans ce cas). Cela fonctionne parfaitement sur Android 2.0 et plus. Cependant, je teste avec Android 1.5 et les problèmes commencent à apparaître. Le code ci-dessus se déroulera la première AsyncTask mais doInBackground () est jamais appelé malgré OnPreExecute () est appelée. Si je suis d'exécuter la première tâche sans méthode get (), doInBackground () est appelée et tout fonctionne comme prévu. Sauf que maintenant je n'ai pas un moyen de déterminer si la première tâche terminée avec succès afin que je puisse dire à la deuxième tâche à exécuter. Est-il sûr de supposer que c'est un bug avec AsyncTask sur Android 1.5? D'autant plus que l'API ( https://developer.android .com / référence / android / os / AsyncTask.html # get% 28% 29 ) dit que la méthode get a été mis en œuvre depuis API 3. Est-ce qu'il y a un moyen de réparer ceci? Ou une autre façon de déterminer que la première tâche est terminée?
La solution
Si vous allez bloquer (via get()
), pourquoi prendre la peine avec AsyncTask
en premier lieu? L'ensemble point de AsyncTask
est de ne pas bloquer.
Si vous voulez avoir SecondTask
exécuter lorsque FirstTask
est fait, ont FirstTask
exécuter SecondTask
dans FirstTask
de onPostExecute()
.