web-dev-qa-db-fra.com

Quels arguments sont passés dans AsyncTask <arg1, arg2, arg3>?

Je ne comprends pas ce que je suis censé mettre ici et où aboutissent ces arguments? Qu'est-ce que je devrais mettre exactement et où ira-t-il exactement? Dois-je inclure les 3 ou puis-je inclure 1,2,20? 

143
mergesort

La documentation Android de Google indique que:

Une tâche asynchrone est définie par 3 types génériques, appelés Params, Progression et Résultat, et 4 étapes, appelés onPreExecute, doInBackground, onProgressUpdate et onPostExecute.

Types génériques de AsyncTask: 

Les trois types utilisés par une tâche asynchrone sont les suivants:

Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.

Tous les types ne sont pas toujours utilisés par une tâche asynchrone. Pour marquer un type comme étant inutilisé, utilisez simplement le type Void:

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

Vous pouvez également vous référer: http://developer.Android.com/reference/Android/os/AsyncTask.html

Ou vous pouvez clarifier le rôle d'AsyncTask en vous référant Blog de Sankar-Ganesh

La structure d'une classe AsyncTask typique ressemble à ceci:

private class MyTask extends AsyncTask<X, Y, Z>

    protected void onPreExecute(){

    }

Cette méthode est exécutée avant de démarrer le nouveau thread. Il n'y a pas de valeurs d'entrée/sortie, alors initialisez simplement les variables ou ce que vous pensez devoir faire.

    protected Z doInBackground(X...x){

    }

La méthode la plus importante de la classe AsyncTask. Vous devez placer ici tout ce que vous voulez faire en arrière-plan, dans un fil différent du fil principal. Nous avons ici comme valeur d'entrée un tableau d'objets du type "X" (voyez-vous dans l'en-tête? Nous avons "... étend AsyncTask" Ce sont les TYPES des paramètres d'entrée) et renvoie un objet du type "Z".

   protected void onProgressUpdate(Y y){

   }

Cette méthode est appelée à l'aide de la méthode publishProgress (y). Elle est généralement utilisée lorsque vous souhaitez afficher une progression ou des informations sur l'écran principal, comme une barre de progression indiquant la progression de l'opération effectuée en arrière-plan.

  protected void onPostExecute(Z z){

  }

Cette méthode est appelée une fois l'opération en arrière-plan terminée. En tant que paramètre d'entrée, vous recevrez le paramètre de sortie de la méthode doInBackground.

Qu'en est-il des types X, Y et Z?

Comme vous pouvez le déduire de la structure ci-dessus:

 X – The type of the input variables value you want to set to the background process. This can be an array of objects.

 Y – The type of the objects you are going to enter in the onProgressUpdate method.

 Z – The type of the result from the operations you have done in the background process.

Comment appelons-nous cette tâche depuis une classe extérieure? Juste avec les deux lignes suivantes:

MyTask myTask = new MyTask();

myTask.execute(x);

Où x est le paramètre d'entrée du type X.

Une fois que notre tâche est en cours d'exécution, nous pouvons connaître son statut «de l'extérieur». Utilisation de la méthode “getStatus ()”.

 myTask.getStatus();

et nous pouvons recevoir le statut suivant:

RUNNING - Indique que la tâche est en cours d'exécution.

EN ATTENTE - Indique que la tâche n'a pas encore été exécutée.

TERMIN&EACUTE; - Indique que onPostExecute (Z) est terminé.

Astuces sur l'utilisation de AsyncTask

  1. N'appelez pas les méthodes onPreExecute, doInBackground et onPostExecute manuellement. Ceci est fait automatiquement par le système.

  2. Vous ne pouvez pas appeler une AsyncTask dans un autre AsyncTask ou Thread. L'appel de la méthode execute doit être effectué dans le thread d'interface utilisateur.

  3. La méthode onPostExecute est exécutée dans le thread d'interface utilisateur (vous pouvez ici appeler une autre AsyncTask!).

  4. Les paramètres d’entrée de la tâche peuvent être un tableau d’objets, ce qui vous permet de définir les objets et les types souhaités.

455
Kartik Domadiya

Je suis trop tard pour la fête mais j'ai pensé que cela pourrait aider quelqu'un.

 

53
mrid

Reportez-vous aux liens suivants:

  1. http://developer.Android.com/reference/Android/os/AsyncTask.html
  2. http://labs.makemachine.net/2010/05/Android-asynctask-example/

Vous ne pouvez pas transmettre plus de trois arguments. Si vous souhaitez passer un seul argument, utilisez void pour les deux autres arguments.

1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 


2. protected class InitTask extends AsyncTask<Context, Integer, Integer>

Une tâche asynchrone est définie par un calcul qui s'exécute sur un thread en arrière-plan et dont le résultat est publié sur le thread d'interface utilisateur. Une tâche asynchrone est définie par 3 types génériques, appelés Params, Progression et Résultat, et 4 étapes, appelés onPreExecute, doInBackground, onProgressUpdate et onPostExecute.

KPBird

4
Ketan Parmar
  • en bref, il y a 3 paramètres dans AsyncTask

    1. paramètres pour l'utilisation dans DoInBackground (String ... params)

    2. paramètres pour afficher l'état d'avancement de l'utilisation dans OnProgressUpdate (String ... status)

    3. paramètres à utiliser dans OnPostExcute (String ... result)

    Remarque: - [Le ​​type de paramètres peut varier en fonction de vos besoins]

3
Chinki Sai

Rester simple!

AsyncTask sont des tâches en arrière-plan qui s'exécutent dans le thread en arrière-plan. Cela prend un Input, exécute Progress et donne Output

c'est-à-dire AsyncTask<Input,Progress,Output>.

Je pense que la principale source de confusion est lorsque nous essayons de mémoriser les paramètres utilisés dans AsyncTask. La clé est ne pas mémoriser. Si vous pouvez visualiser ce que votre tâche doit réellement faire, alors écrire la AsyncTask avec la signature correcte du premier coup serait un jeu d'enfant. Déterminez simplement ce que sont vos intrants, vos progrès et vos résultats et vous serez prêt à partir. 

Par exemple: enter image description here

Cœur de la tâche asynchrone!

la méthode doInBackgound () est la méthode la plus importante dans la tâche Async

  • Seule cette méthode s'exécute dans le thread d'arrière-plan et publie des données dans le thread d'interface utilisateur.
  • Sa signature change avec les paramètres AsyncTask

So laisse voir la relation 

 enter image description here

doInBackground() et onPostExecute(), onProgressUpdate() sont également liés

 enter image description here

Montre moi le code
Alors comment vais-je écrire le code pour DownloadTask?

DownloadTask extends AsyncTask<String,Integer,String>{

      @Override
      public void onPreExecute()
      {}

      @Override
      public String doInbackGround(String... params)
      {
               // Download code
               int downloadPerc = // calculate that
               publish(downloadPerc);

               return "Download Success";
      }

      @Override
      public void onPostExecute(String result)
      {
          super.onPostExecute(result);
      }

      @Override
      public void onProgressUpdate(Integer... params)
      {
             // show in spinner, access UI elements
      }

}

Comment allez-vous exécuter cette tâche

new DownLoadTask().execute("Paradise.mp3");
1
Rohit Singh