чому, як і які параметри передаються до Асинтактаска <>, детально дивіться тут . Я думаю, що це найкраще пояснення.
Документація Google для Android говорить:
Асинхронна задача визначається трьома загальними типами, що називаються Парамами, Прогресом та Результатом, та 4 кроками, які називаються onPreExecute, doInBackground, onProgressUpdate та onPostExecute.
Загальні типи AsyncTask:
Три типи, що використовуються асинхронною задачею, є наступними:
Парами, тип параметрів, що надсилаються завданням після виконання. Прогрес, тип одиниць прогресу, опублікованих під час обчислення фоном. Результат, тип результату обчислення фону. Не всі типи завжди використовуються асинхронним завданням. Щоб позначити тип як невикористаний, просто використовуйте тип Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Ви можете подати посилання: http://developer.android.com/reference/android/os/AsyncTask.html
Або ви можете зрозуміти, у чому роль AsyncTask, переглянувши блог Санкара-Ганеша
Ну Структура типового класу AsyncTask виглядає так:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Цей метод виконується перед запуском нової теми. Значення вводу / виводу немає, тому просто ініціалізуйте змінні або все, що ви думаєте, що вам потрібно зробити.
protected Z doInBackground(X...x){
}
Найважливіший метод у класі AsyncTask. Ви повинні розмістити тут усі речі, які ви хочете зробити на задньому плані, в іншій нитці від основної. Тут ми маємо як вхідне значення масив об’єктів типу "X" (Ви бачите в заголовку? У нас є "... extens AsyncTask" (це типи вхідних параметрів)) і повертає об'єкт від типу "Z".
захищена void onProgressUpdate (Y y) {
} Цей метод називається за допомогою методу публікуватиProgress (y), і він зазвичай використовується, коли ви хочете показати будь-який прогрес або інформацію на головному екрані, як-от панель прогресу, що показує хід операції, яку ви виконуєте у фоновому режимі.
захищена пустота onPostExecute (Z z) {
} Цей метод викликається після операції у фоновому режимі. Як вхідний параметр ви отримаєте вихідний параметр методу doInBackground.
Що з типами X, Y і Z?
Як можна зробити з наведеної структури:
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.
Як ми називаємо це завдання поза класом? Просто з наступними двома рядками:
MyTask myTask = new MyTask();
myTask.execute(x);
Де x - вхідний параметр типу X.
Після того, як ми виконаємо наше завдання, ми зможемо дізнатись його стан із зовнішнього боку. Використовуючи метод «getStatus ()».
myTask.getStatus (); і ми можемо отримати такий статус:
РУНІНГ - вказує на те, що завдання виконується.
ОЧАКУВАННЯ - означає, що завдання ще не виконано.
ЗАВЕРШЕНО - Вказує на те, що onPostExecute (Z) закінчено.
Підказки щодо використання AsyncTask
Не викликайте методи onPreExecute, doInBackground та onPostExecute вручну. Це автоматично робиться системою.
Ви не можете викликати AsyncTask всередині іншого AsyncTask або Thread. Виклик виконавця методу повинен здійснюватися в потоці інтерфейсу користувача.
Метод onPostExecute виконується в потоці користувальницького інтерфейсу (тут ви можете викликати інший AsyncTask!).
Вхідними параметрами завдання може бути масив Object, таким чином ви можете розміщувати будь-які об'єкти та типи, які ви хочете.