почему, как и какие параметры передаются в Asynctask <>, см. подробности здесь . Думаю, это лучшее объяснение.
Документация Google для Android гласит:
Асинхронная задача определяется 3 универсальными типами, называемыми Params, Progress и Result, и 4 шагами, называемыми onPreExecute, doInBackground, onProgressUpdate и onPostExecute.
Общие типы AsyncTask:
Асинхронная задача использует следующие три типа:
Params, тип параметров, отправляемых задаче при выполнении. Прогресс, тип единиц прогресса, публикуемых во время фоновых вычислений. Результат, тип результата фоновых вычислений. Не все типы всегда используются асинхронной задачей. Чтобы пометить тип как неиспользуемый, просто используйте тип 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» (вы видите в заголовке? У нас есть «... extends AsyncTask» Это ТИПЫ входных параметров) и возвращает объект из типа «Z».
protected void onProgressUpdate (Y y) {
} Этот метод вызывается с использованием метода publishProgress (y), и он обычно используется, когда вы хотите показать какой-либо прогресс или информацию на главном экране, например, индикатор выполнения, показывающий ход операции, которую вы выполняете в фоновом режиме.
protected void 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. Вызов метода execute должен выполняться в потоке пользовательского интерфейса.
Метод onPostExecute выполняется в потоке пользовательского интерфейса (здесь вы можете вызвать другую AsyncTask!).
Входными параметрами задачи может быть массив объектов, таким образом вы можете поместить любые объекты и типы, которые захотите.