Я не понимаю, что я должен здесь изложить и где эти аргументы заканчиваются? Что именно я должен поставить, и куда именно он пойдет? Нужно ли включать все 3 или можно включить 1,2,20?
Я не понимаю, что я должен здесь изложить и где эти аргументы заканчиваются? Что именно я должен поставить, и куда именно он пойдет? Нужно ли включать все 3 или можно включить 1,2,20?
Ответы:
Документация Google по Android говорит, что:
Асинхронная задача определяется 3 общими типами, называемыми 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, ссылаясь на блог Санкара-Ганеша
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 - указывает, что задача выполняется.
В ОЖИДАНИИ - указывает, что задача еще не выполнена.
ЗАВЕРШЕНО - указывает, что onPostExecute (Z) завершено.
Советы по использованию AsyncTask
Не вызывайте методы onPreExecute, doInBackground и onPostExecute вручную. Это автоматически делается системой.
Вы не можете вызвать AsyncTask внутри другого AsyncTask или Thread. Вызов метода execute должен быть выполнен в потоке пользовательского интерфейса.
Метод onPostExecute выполняется в потоке пользовательского интерфейса (здесь вы можете вызвать другой AsyncTask!).
Входные параметры задачи могут быть массивом объектов, таким образом, вы можете поместить любые объекты и типы, которые вы хотите.
WeakAsyncTask
а
AsyncTask
Фоновая задача , которая выполняется в фоновом потоке. Он принимает входные данные , выполняет прогресс и выдает выходные данные .
то есть
AsyncTask<Input,Progress,Output>
.
На мой взгляд, основной источник путаницы возникает, когда мы пытаемся запомнить параметры в AsyncTask
.
Ключ не запоминай .
Если вы можете визуализировать, что на самом деле нужно сделать для вашей задачи, тогда написание AsyncTask
правильной сигнатуры было бы просто.
Просто выясните, каковы ваши Входные данные , Прогресс и Выходные данные , и у вас все получится.
doInBackgound()
Метод является наиболее важным методом, AsyncTask
потому что
AsyncTask
зависимости от параметров.Итак, давайте посмотрим на отношения
doInBackground()
иonPostExecute()
,onProgressUpdate()
также связаны
Покажите мне код
Итак, как я напишу код для DownloadTask?
DownloadTask extends AsyncTask<String,Integer,String>{
@Override
public void onPreExecute()
{}
@Override
public String doInbackGround(String... params)
{
// Download code
int downloadPerc = // calculate that
publish(downloadPerc);
return "Download Success";
}
@Override
public void onPostExecute(String result)
{
super.onPostExecute(result);
}
@Override
public void onProgressUpdate(Integer... params)
{
// show in spinner, access UI elements
}
}
Как вы будете выполнять эту задачу
new DownLoadTask().execute("Paradise.mp3");
// show in spinner, access UI elements
было просто onProgressUpdate(...)
Обратитесь к следующим ссылкам:
Вы не можете передать более трех аргументов, если вы хотите передать только 1 аргумент, используйте void для двух других аргументов.
1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
Асинхронная задача определяется вычислением, которое выполняется в фоновом потоке и результаты которого публикуются в потоке пользовательского интерфейса. Асинхронная задача определяется 3 общими типами, называемыми Params, Progress и Result, и 4 шагами, называемыми onPreExecute, doInBackground, onProgressUpdate и onPostExecute.
KPBird
Короче говоря, в AsyncTask есть 3 параметра
параметры для использования ввода в DoInBackground (String ... params)
параметры для отображения статуса использования прогресса в OnProgressUpdate (String ... status)
параметры для использования результата в OnPostExcute (String ... result)
Примечание: - [Тип параметров может варьироваться в зависимости от ваших требований]