2012-10-08 2 views
0

Je veux attendre jusqu'à ce que mon AsynTask soit terminé avant de continuer. L'état indique toujours RUNNING cependant. Comment le signal AsyncTask peut-il être terminé? Pourquoi ma boucle while est-elle sans fin? Je pensais qu'une fois que onPostExecute() est appelée sur la tâche le statut est changé en FINISHED.Comment obtenir AsyncTask Terminé Statut De Non Activité Classe

private void methodOne(Context context) { 

MyNewTask getMyTask = null; 

    try { 


     getMyTask = new MyNewTask(context, null, null, param1); 

     getMyTask.execute(getUrl()); 

     while(getResourceTask.getStatus().equals(AsyncTask.Status.RUNNING)){ 

      Log.i("log", "STATUS : " + getMyTask.getStatus()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Répondre

2

Cette méthode est-elle exécutée dans un thread d'interface utilisateur? Si c'est le cas, onPostExecute() n'aura aucune chance d'être exécuté (thread d'interface utilisateur bloqué).

Normalement, vous n'attendez pas que la tâche AsyncTask se termine par une boucle. Ceci est une odeur de code grave. Vous devriez juste commencer ce que vous voulez faire dans onPostExecute().

Ainsi, au lieu de

task.execute(); 
while(task.getStatus().equals(AsyncTask.Status.RUNNING)) {}; 
doSomeWork(); 

Vous devez utiliser:

task.execute(); 

Et:

void onPostExecute(Param... params) { 
    doSomeWork(); 
} 

doSomeWork() est une méthode dans la classe qui appelle AsyncTask. De cette façon, vous êtes informé que la tâche est terminée.

+0

Merci Tomasz, mon AsyncTask fait partie de sa propre classe ... ce n'est pas une sous-classe. comment puis-je l'obtenir de signaler qu'il a fini à la classe appelante? – user1518485

+1

Cela n'a rien à voir avec les cours. Cela a à voir avec les discussions. Si la boucle while est exécutée sur le thread principal (pas dans un autre 'AsyncTask' ou' Thread') elle bloquera ce thread principal. 'OnPostExecute' est toujours appelé dans ce thread principal, donc il sera également bloqué. J'ai déjà posté comment vous devriez aborder cette question –

Questions connexes