webentwicklung-frage-antwort-db.com.de

Welche Argumente werden an AsyncTask <arg1, arg2, arg3> übergeben?

Ich verstehe nicht, was ich hier einbringen soll und wo diese Argumente enden. Was genau soll ich setzen und wohin geht es genau? Muss ich alle 3 angeben oder kann ich 1,2,20 angeben? 

143
mergesort

Die Android-Dokumentation von Google besagt Folgendes:

Eine asynchrone Task wird durch 3 generische Typen definiert, die als Params, Progress und Result bezeichnet werden, sowie 4 Schritte, die als onPreExecute, doInBackground, onProgressUpdate und onPostExecute bezeichnet werden.

Die generischen Typen von AsyncTask: 

Die drei von einer asynchronen Task verwendeten Typen sind die folgenden:

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.

Nicht alle Typen werden immer von einer asynchronen Task verwendet. Um einen Typ als nicht verwendet zu kennzeichnen, verwenden Sie einfach den Typ Void:

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

Sie können weiter verweisen: http://developer.Android.com/reference/Android/os/AsyncTask.html

Oder Sie können die Rolle von AsyncTask löschen, indem Sie auf Sankar-Ganeshs Blog verweisen.

Die Struktur einer typischen AsyncTask-Klasse sieht folgendermaßen aus:

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

    protected void onPreExecute(){

    }

Diese Methode wird ausgeführt, bevor der neue Thread gestartet wird. Es gibt keine Eingabe-/Ausgabewerte, initialisieren Sie also einfach die Variablen oder was auch immer Sie denken.

    protected Z doInBackground(X...x){

    }

Die wichtigste Methode in der AsyncTask-Klasse. Sie müssen hier all das, was Sie im Hintergrund machen möchten, in einem anderen Thread als dem Haupt-Thread platzieren. Hier haben wir als Eingabewert ein Array von Objekten vom Typ "X" (sehen Sie im Header? Wir haben "... erweitert AsyncTask". Dies sind die TYPES der Eingabeparameter) und geben ein Objekt vom Typ zurück "Z".

   protected void onProgressUpdate(Y y){

   }

Diese Methode wird mit der Methode publishProgress (y) aufgerufen. Sie wird normalerweise verwendet, wenn Sie Fortschritt oder Informationen auf dem Hauptbildschirm anzeigen möchten, z. B. eine Fortschrittsleiste, die den Fortschritt des Vorgangs im Hintergrund anzeigt.

  protected void onPostExecute(Z z){

  }

Diese Methode wird aufgerufen, nachdem die Operation im Hintergrund abgeschlossen ist. Als Eingabeparameter erhalten Sie den Ausgabeparameter der Methode doInBackground.

Was ist mit den X-, Y- und Z-Typen?

Wie Sie aus der obigen Struktur ableiten können:

 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.

Wie nennen wir diese Aufgabe von außen? Nur mit den folgenden zwei Zeilen:

MyTask myTask = new MyTask();

myTask.execute(x);

Dabei ist x der Eingabeparameter vom Typ X.

Sobald wir unsere Aufgabe erledigt haben, können wir den Status von außen herausfinden. Verwenden der Methode "getStatus ()".

 myTask.getStatus();

und wir können den folgenden Status erhalten:

RUNNING - Gibt an, dass die Task ausgeführt wird.

PENDING - Gibt an, dass die Aufgabe noch nicht ausgeführt wurde.

BEENDET - Gibt an, dass onPostExecute (Z) abgeschlossen ist.

Hinweise zur Verwendung von AsyncTask

  1. Rufen Sie die Methoden onPreExecute, doInBackground und onPostExecute nicht manuell auf. Dies geschieht automatisch vom System.

  2. Sie können eine AsyncTask nicht in einer anderen AsyncTask oder einem anderen Thread aufrufen. Der Aufruf der Methode exec muss im UI-Thread erfolgen.

  3. Die Methode onPostExecute wird im UI-Thread ausgeführt (hier können Sie eine andere AsyncTask aufrufen!).

  4. Die Eingabeparameter der Task können ein Object-Array sein. Auf diese Weise können Sie die gewünschten Objekte und Typen einfügen.

455
Kartik Domadiya

Ich bin zu spät zur Party, dachte aber, das könnte jemandem helfen.

 

53
mrid

Siehe folgende Links:

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

Sie können nicht mehr als drei Argumente übergeben. Wenn Sie nur ein Argument übergeben möchten, verwenden Sie void für die beiden anderen Argumente.

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


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

Eine asynchrone Task wird durch eine Berechnung definiert, die in einem Hintergrundthread ausgeführt wird und deren Ergebnis im UI-Thread veröffentlicht wird. Eine asynchrone Task wird durch 3 generische Typen definiert, die als Params, Progress und Result bezeichnet werden, sowie 4 Schritte, die als onPreExecute, doInBackground, onProgressUpdate und onPostExecute bezeichnet werden.

KPBird

4
Ketan Parmar
  • kurz: Es gibt 3 Parameter in AsyncTask

    1. parameter für die Verwendung von Input in DoInBackground (String ... params)

    2. parameter zum Anzeigen des Status des Fortschritts in OnProgressUpdate (String ... Status)

    3. parameter für die Verwendung des Ergebnisses in OnPostExcute (String ... Ergebnis)

    Hinweis: - [Typ der Parameter kann je nach Anforderung variieren]

3
Chinki Sai

Halte es einfach!

AsyncTask sind Hintergrundaufgaben, die im Hintergrundthread ausgeführt werden. Es nimmt einen Input, führt Progress aus und gibt Output

dh AsyncTask<Input,Progress,Output>.

Ich denke, die Hauptursache für Verwirrung ist, wenn wir versuchen, die in AsyncTask verwendeten Parameter zu merken. Der Schlüssel ist Nicht merken. Wenn Sie sich vorstellen können, was Ihre Aufgabe wirklich tun muss, dann wäre das Schreiben der AsyncTask mit der richtigen Signatur beim ersten Versuch ein Kinderspiel. Finden Sie heraus, was Ihre Eingabe, Ihr Fortschritt und Ihre Ausgabe sind, und Sie werden gut sein. 

Zum Beispiel: enter image description here

Herz der AsyncTask!

die Methode doInBackgound () ist die wichtigste Methode in AsyncTask Since

  • Nur diese Methode wird im Hintergrundthread ausgeführt und veröffentlicht Daten im UI-Thread.
  • Seine Signatur ändert sich mit den AsyncTask-Parametern. 

So lassen Sie uns die Beziehung sehen 

 enter image description here

doInBackground() und onPostExecute(), onProgressUpdate() sind ebenfalls miteinander verbunden

 enter image description here

Zeigen Sie mir den Code
Wie schreibe ich den Code für 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
      }

}

Wie werden Sie diese Aufgabe ausführen

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