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