почему, как и какие параметры передаются в Asynctask <>, см. Подробности здесь .Я думаю, что это лучшее объяснение.
Документация Google по Android говорит, что:
Асинхронная задача определяется 3 общими типами, называемыми Params, Progress и Result, и 4 шагами, называемыми onPreExecute,doInBackground, onProgressUpdate и onPostExecute.
Общие типы AsyncTask:
Три типа, используемые асинхронной задачей, следующие:
Params, тип параметров, отправляемых взадание при исполнении.Прогресс, тип единиц прогресса, опубликованных во время фоновых вычислений.Result - тип результата фонового вычисления.Не все типы всегда используются асинхронной задачей.Чтобы пометить тип как неиспользуемый, просто используйте тип 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 ();и мы можем получить следующее состояние:
RUNNING - указывает, что задача выполняется.
PENDING - указывает, что задача еще не выполнена.
FINISHED - указываетчто onPostExecute (Z) завершено.
Подсказки по использованию AsyncTask
Не вызывайте методы onPreExecute, doInBackground и onPostExecute вручную.Это автоматически выполняется системой.
Вы не можете вызвать AsyncTask внутри другого AsyncTask или Thread.Вызов метода execute должен быть выполнен в потоке пользовательского интерфейса.
Метод onPostExecute выполняется в потоке пользовательского интерфейса (здесь вы можете вызвать другой AsyncTask!).
Входные параметры объектазадача может быть массивом объектов, таким образом, вы можете размещать любые объекты и типы по вашему желанию.