2013-10-02 4 views
0

Supposant J'utilise le AsycTask (appelé A) suivant pour envoyer des données sur internet:AsyncTask appels imbriqués

private class A extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pd = ProgressDialog.show(context, "Notification", "Sending message..."); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     sendMessage(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     if(pd!=null && pd.isShowing()) 
      pd.dismiss();   
    } 
} 

A l'intérieur du doInbackground est appelé ma méthode sendMessage(). Je ne vais pas entrer dans les détails de cette méthode, il suffit d'imaginer que cette méthode exécute un Thread (supposons qu'il s'appelle B).

Ainsi, la question est:

Le code à l'intérieur du onPostExecute() de AsyncTaskA sera exécutée après la fin de la ThreadB?

Sinon, comment rendre possible que onPostExecute ne soit exécuté que lorsque le AsyncTask dans le sendMessage() sera terminé?

Répondre

1

vous pourriez laisser le sendMessage() renvoyer l'objet de cette discussion puis appelez

Thread.join() 

Cela entraînera le doInBackground d'attendre jusqu'à ce que le fil est terminé.

+0

Vous avez raison, je me contentais de la méthode join(), et cela fonctionne pour moi. – GVillani82

1

Eh bien, c'est assez simple. Il suffit d'appeler cela AsyncTaskB dans onPostExecute de AsyncTaskA.

Édition: Le filetage à l'intérieur du fil n'est plus possible à partir de l'ICS. Cela ne vous donnera pas d'erreur, mais cela ne fonctionnera pas et votre application restera bloquée.

+0

Évident @Ravi, mais le mien est une question théorique – GVillani82

+0

mate, pouvez-vous s'il vous plaît poster un lien ou quelque chose. Je veux connaître les détails à ce sujet. Merci d'avance. – guness

+0

@bluebrain Je n'ai pas de lien pour ça mais si vous regardez le style de travail de 'AsyncTask', vous verrez que la réponse est assez simple. –

Questions connexes