Odpowiedzi:
Dokumentacja Google dotycząca Androida mówi, że:
Zadanie asynchroniczne jest definiowane przez 3 typy ogólne, nazywane Params, Progress i Result oraz 4 kroki, nazywane onPreExecute, doInBackground, onProgressUpdate i onPostExecute.
Typy ogólne AsyncTask:
Trzy typy używane przez zadanie asynchroniczne są następujące:
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.
Nie wszystkie typy są zawsze używane przez zadanie asynchroniczne. Aby oznaczyć typ jako nieużywany, po prostu użyj typu Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Możesz dalej odnieść się: http://developer.android.com/reference/android/os/AsyncTask.html
Lub możesz wyjaśnić, jaką rolę pełni AsyncTask, kierując blog Sankar-Ganesh
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Ta metoda jest wykonywana przed uruchomieniem nowego Thread. Nie ma wartości wejściowych / wyjściowych, więc po prostu zainicjuj zmienne lub cokolwiek myślisz, że musisz zrobić.
protected Z doInBackground(X...x){
}
Najważniejsza metoda w klasie AsyncTask. Musisz umieścić tutaj wszystkie rzeczy, które chcesz zrobić w tle, w innym wątku niż główny. Tutaj mamy jako wartość wejściową tablicę obiektów typu „X” (czy widzisz w nagłówku? Mamy „… extends AsyncTask” To są TYPY parametrów wejściowych) i zwraca obiekt z typu „Z”.
protected void onProgressUpdate(Y y){
}
Ta metoda jest wywoływana przy użyciu metody publicProgress (y) i jest zwykle używana, gdy chcesz pokazać postęp lub informacje na ekranie głównym, takie jak pasek postępu pokazujący postęp operacji, którą wykonujesz w tle.
protected void onPostExecute(Z z){
}
Ta metoda jest wywoływana po wykonaniu operacji w tle. Jako parametr wejściowy otrzymasz parametr wyjściowy metody doInBackground.
A co z typami X, Y i Z?
Jak można wywnioskować z powyższej struktury:
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.
Jak nazywamy to zadanie z zewnątrz? Tylko z następującymi dwoma wierszami:
MyTask myTask = new MyTask();
myTask.execute(x);
Gdzie x jest parametrem wejściowym typu X.
Po uruchomieniu zadania możemy dowiedzieć się o jego statusie „z zewnątrz”. Korzystanie z metody „getStatus ()”.
myTask.getStatus();
i możemy otrzymać następujący status:
RUNNING - wskazuje, że zadanie jest uruchomione.
PENDING - wskazuje, że zadanie nie zostało jeszcze wykonane.
FINISHED - wskazuje, że onPostExecute (Z) został zakończony.
Wskazówki dotyczące korzystania z AsyncTask
Nie wywołuj ręcznie metod onPreExecute, doInBackground i onPostExecute. Jest to wykonywane automatycznie przez system.
Nie można wywołać AsyncTask wewnątrz innego AsyncTask lub Thread. Wywołanie metody należy wykonać w wątku interfejsu użytkownika.
Metoda onPostExecute jest wykonywana w wątku UI (tutaj możesz wywołać inny AsyncTask!).
Parametrami wejściowymi zadania może być tablica Object, w ten sposób możesz umieścić dowolne obiekty i typy.
WeakAsyncTask
, a także
AsyncTask
To zadanie w tle, która biegnie w wątku tła. Zajmuje wejściowe , wykonuje Postęp i daje wyjście .
tj
AsyncTask<Input,Progress,Output>
.
Moim zdaniem głównym źródłem nieporozumień jest próba zapamiętania parametrów w pliku AsyncTask
.
Kluczem jest nie zapamiętywać .
Jeśli potrafisz sobie wyobrazić, co naprawdę musi zrobić twoje zadanie, napisanie AsyncTask
poprawnego podpisu byłoby bułką z masłem.
Wystarczy dowiedzieć się, co twój wejściowe , Progress i wyjścia są i będzie dobrze iść.
doInBackgound()
metoda jest najważniejszą metodą w pliku AsyncTask
ponieważ
AsyncTask
parametrami.Zobaczmy więc związek
doInBackground()
aonPostExecute()
,onProgressUpdate()
są również związane
Pokaż mi kod
Jak więc napiszę kod 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
}
}
Jak wykonasz to zadanie
new DownLoadTask().execute("Paradise.mp3");
// show in spinner, access UI elements
było po prostu najprostszym wyjaśnieniem onProgressUpdate(...)
:)
Skorzystaj z poniższych łączy:
Nie możesz przekazać więcej niż trzech argumentów, jeśli chcesz przekazać tylko 1 argument, użyj void dla pozostałych dwóch argumentów.
1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
Zadanie asynchroniczne jest definiowane przez obliczenia, które są uruchamiane w wątku w tle i których wynik jest publikowany w wątku interfejsu użytkownika. Zadanie asynchroniczne jest definiowane przez 3 typy ogólne, zwane Params, Progress i Result oraz 4 kroki, nazywane onPreExecute, doInBackground, onProgressUpdate i onPostExecute.
KPBird
w skrócie, w AsyncTask są 3 parametry
parametry do użycia wejściowego w DoInBackground (parametry String ...)
parametry pokazujące stan postępu użycia w OnProgressUpdate (String ... status)
parametry do wykorzystania wyników w OnPostExcute (String ... result)
Uwaga: - [Typ parametrów może się różnić w zależności od wymagań]