Warum, wie und welche Parameter an Asynctask <> übergeben werden, siehe Details hier . Ich denke, das ist die beste Erklärung.
In der Android-Dokumentation von Google heißt es:
Eine asynchrone Aufgabe wird durch drei generische Typen definiert, die als Parameter, Fortschritt und Ergebnis bezeichnet werden, und vier Schritte, die als onPreExecute, doInBackground, onProgressUpdate und onPostExecute bezeichnet werden.
Generische Typen von AsyncTask:
Die drei von einer asynchronen Task verwendeten Typen sind die folgenden:
Params, der Typ der Parameter, die bei der Ausführung an die Task gesendet werden. Fortschritt, der Typ der Fortschrittseinheiten, die während der Hintergrundberechnung veröffentlicht wurden. Ergebnis, der Typ des Ergebnisses der Hintergrundberechnung. Nicht alle Typen werden immer von einer asynchronen Aufgabe verwendet. Um einen Typ als nicht verwendet zu markieren, 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 anhand des Blogs von Sankar-Ganesh klären
Nun, 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 Variablen oder was auch immer Sie tun müssen.
protected Z doInBackground(X...x){
}
Die wichtigste Methode in der AsyncTask-Klasse. Sie müssen hier alle Dinge, die Sie tun möchten, in den Hintergrund stellen, in einen anderen Thread als den Haupt-Thread. Hier haben wir als Eingabewert ein Array von Objekten vom Typ "X" (sehen Sie in der Kopfzeile? Wir haben "... erweitert AsyncTask" Dies sind die TYPEN 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 Fortschritte oder Informationen im Hauptbildschirm anzeigen möchten, z. B. einen Fortschrittsbalken, der den Fortschritt des Vorgangs im Hintergrund anzeigt.
geschützte Leere onPostExecute (Z z) {
} Diese Methode wird aufgerufen, nachdem die Operation im Hintergrund ausgeführt wurde. 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 einer externen Klasse? Nur mit den folgenden zwei Zeilen:
MyTask myTask = new MyTask();
myTask.execute(x);
Wobei x der Eingabeparameter vom Typ X ist.
Sobald wir unsere Aufgabe ausgeführt haben, können wir ihren Status von „außen“ herausfinden. Verwenden der Methode "getStatus ()".
myTask.getStatus (); und wir können den folgenden Status erhalten:
RUNNING - Zeigt an, dass die Aufgabe ausgeführt wird.
PENDING - Zeigt an, dass die Aufgabe noch nicht ausgeführt wurde.
FINISHED - Zeigt an, dass onPostExecute (Z) beendet wurde.
Hinweise zur Verwendung von AsyncTask
Rufen Sie die Methoden onPreExecute, doInBackground und onPostExecute nicht manuell auf. Dies erfolgt automatisch durch das System.
Sie können eine AsyncTask nicht in einer anderen AsyncTask oder einem anderen Thread 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 Objektarray sein. Auf diese Weise können Sie beliebige Objekte und Typen einfügen.