Warum, wie und welche Parameter an Asynctask<> übergeben werden, siehe Detail aquí . Ich denke, das ist die beste Erklärung.
In der Android-Dokumentation von Google heißt es, dass :
Eine asynchrone Aufgabe wird durch 3 generische Typen definiert, die Params, Progress und Result heißen, und 4 Schritte, die onPreExecute, doInBackground, onProgressUpdate und onPostExecute heißen.
Die generischen Typen von AsyncTask :
Die drei von einer asynchronen Aufgabe verwendeten Typen sind die folgenden:
Params, der Typ der Parameter, die bei der Ausführung an die Aufgabe gesendet werden. Progress, der Typ der Fortschrittseinheiten, die während der Hintergrundberechnung veröffentlicht werden. Result, der Typ des Ergebnisses der Hintergrundberechnung. Nicht alle Typen werden immer von einer asynchronen Aufgabe verwendet. Um einen Typ als unbenutzt zu kennzeichnen, verwenden Sie einfach den Typ Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Sie können sich weiter informieren: http://developer.Android.com/reference/Android/os/AsyncTask.html
Oder Sie können klar, was die Rolle der AsyncTask durch Verweis auf Sankar-Ganesh's Blog
Die Struktur einer typischen AsyncTask-Klasse sieht folgendermaßen aus:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Diese Methode wird vor dem Start des neuen Threads ausgeführt. Es gibt keine Eingabe-/Ausgabewerte, also initialisieren Sie einfach Variablen oder was immer Sie für notwendig halten.
protected Z doInBackground(X...x){
}
Die wichtigste Methode in der AsyncTask-Klasse. Hier müssen Sie all die Dinge unterbringen, die Sie im Hintergrund, in einem anderen Thread als dem Hauptthread, erledigen wollen. Hier haben wir als Eingabewert ein Array von Objekten vom Typ "X" (Sehen Sie im Header? Wir haben "...extends AsyncTask" Das sind die TYPES der Eingabeparameter) und geben ein Objekt vom Typ "Z" zurück.
protected void onProgressUpdate(Y y){
} Diese Methode wird über die Methode publishProgress(y) aufgerufen und wird in der Regel verwendet, wenn Sie einen Fortschritt oder Informationen auf dem Hauptbildschirm anzeigen möchten, wie z. B. einen Fortschrittsbalken, der den Fortschritt der Operation anzeigt, die Sie im Hintergrund durchführen.
protected void onPostExecute(Z z){
} Diese Methode wird aufgerufen, nachdem der Vorgang im Hintergrund abgeschlossen ist. Als Eingabeparameter erhalten Sie den Ausgabeparameter der doInBackground-Methode.
Was ist mit den Typen X, Y und Z?
Wie Sie aus der obigen Struktur ersehen 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 können wir diese Aufgabe von einer externen Klasse aus aufrufen? Einfach mit den folgenden zwei Zeilen:
MyTask myTask = new MyTask();
myTask.execute(x);
Dabei ist x der Eingabeparameter vom Typ X.
Sobald unsere Aufgabe läuft, können wir ihren Status von "außen" abfragen. Dazu verwenden wir die Methode "getStatus()".
myTask.getStatus(); und wir können den folgenden Status erhalten:
LÄUFT - Zeigt an, dass die Aufgabe ausgeführt wird.
PENDING - Zeigt an, dass die Aufgabe noch nicht ausgeführt worden ist.
FINISHED - Zeigt an, dass onPostExecute(Z) beendet ist.
Hinweise zur Verwendung von AsyncTask
Rufen Sie die Methoden onPreExecute, doInBackground und onPostExecute nicht manuell auf. Dies wird automatisch vom System erledigt.
Sie können eine AsyncTask nicht innerhalb einer anderen AsyncTask oder eines Threads aufrufen. Der Aufruf der Methode execute muss im UI-Thread erfolgen.
Die Methode onPostExecute wird im UI-Thread ausgeführt (hier können Sie eine andere AsyncTask aufrufen!).
Die Eingabeparameter der Aufgabe können ein Objekt-Array sein, so dass Sie beliebige Objekte und Typen eingeben können.