dlaczego, jak i które parametry są przekazywane do Asynctask <>, zobacz szczegóły tutaj . Myślę, że to najlepsze wyjaśnienie.
Dokumentacja Google dotycząca Androida mówi, że:
Zadanie asynchroniczne jest definiowane przez 3 typy ogólne, zwane 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, rodzaj parametrów wysyłanych do zadania po jego wykonaniu. Postęp, typ jednostek postępu opublikowanych podczas obliczeń w tle. Wynik, typ wyniku obliczeń w tle. 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 polecić: http://developer.android.com/reference/android/os/AsyncTask.html
Lub możesz wyjaśnić, jaką rolę pełni AsyncTask, kierując blog Sankar-Ganesh
Cóż, struktura typowej klasy AsyncTask wygląda następująco:
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 za pomocą 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.