Ich verstehe nicht, was ich hier einfügen soll und wo diese Argumente enden? Was genau soll ich setzen und wohin genau wird es gehen? Muss ich alle 3 einschließen oder kann ich 1,2,20 einschließen?
Ich verstehe nicht, was ich hier einfügen soll und wo diese Argumente enden? Was genau soll ich setzen und wohin genau wird es gehen? Muss ich alle 3 einschließen oder kann ich 1,2,20 einschließen?
Antworten:
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, 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 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
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.
protected void 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.
WeakAsyncTask
und
Eine AsyncTask
Hintergrundaufgabe, die im Hintergrundthread ausgeführt wird. Es nimmt eine Eingabe , führt den Fortschritt aus und gibt die Ausgabe aus .
dh
AsyncTask<Input,Progress,Output>
.
Meiner Meinung nach ist die Hauptursache für Verwirrung, wenn wir versuchen, uns die Parameter in der zu merken AsyncTask
.
Der Schlüssel ist Nicht auswendig lernen .
Wenn Sie sich vorstellen können, was Ihre Aufgabe wirklich zu tun hat, ist das Schreiben AsyncTask
mit der richtigen Signatur ein Kinderspiel.
Finden Sie einfach heraus, was Ihre Eingabe , Ihr Fortschritt und Ihre Ausgabe sind, und Sie können loslegen.
doInBackgound()
Methode ist die wichtigste Methode in einem AsyncTask
weil
AsyncTask
Parametern.Also lasst uns die Beziehung sehen
doInBackground()
undonPostExecute()
,onProgressUpdate()
auch im Zusammenhang
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");
// show in spinner, access UI elements
war zweifellos die einfachste Erklärung für das onProgressUpdate(...)
:)
Siehe folgende Links:
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 Aufgabe wird durch eine Berechnung definiert, die auf einem Hintergrundthread ausgeführt wird und deren Ergebnis im UI-Thread veröffentlicht wird. 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.
KPBird
Kurz gesagt, es gibt 3 Parameter in AsyncTask
Parameter für die Verwendung von Eingaben in DoInBackground (String ... params)
Parameter für die Anzeige des Status des Fortschritts in OnProgressUpdate (String ... Status)
Parameter für die Ergebnisverwendung in OnPostExcute (String ... Ergebnis)
Hinweis: - [Die Art der Parameter kann je nach Anforderung variieren]