Какие аргументы передаются в AsyncTask <arg1, arg2, arg3>?

Я не понимаю, что я должен здесь положить и где эти аргументы заканчиваются? Что именно я должен поставить, и куда именно он пойдет? Нужно ли включать все 3 или я могу включить 1,2,20?

Ответ 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!).

  • Входные параметры задачи могут быть массивом объектов, таким образом вы можете поместить любые объекты и типы, которые вы хотите.

Ответ 2

Я опоздал на вечеринку, но подумал, что это может кому-то помочь.

Ответ 3

Будь проще!

AsyncTask является фоновой задачей, которая выполняется в фоновом потоке. Он принимает входные данные, выполняет прогресс и выдает выходные данные.

т.е. AsyncTask<Input,Progress,Output>.

На мой взгляд, основной источник путаницы возникает, когда мы пытаемся запомнить параметры в AsyncTask.
Ключ не запоминай.
Если вы можете визуализировать, что на самом деле нужно делать вашей задаче, то написание AsyncTask с правильной подписью было бы просто.
Просто выясните, каковы ваши входные данные, прогресс и выход, и вам будет хорошо идти.

Например: enter image description here

Сердце AsyncTask!

doInBackgound() является наиболее важным методом в AsyncTask потому что

  • Только этот метод выполняется в фоновом потоке и публикует данные в потоке пользовательского интерфейса.
  • Его подпись изменяется с параметрами AsyncTask.

Итак, давайте посмотрим на отношения

enter image description here

doInBackground() и onPostExecute(), onProgressUpdate() также связаны

enter image description here

Покажи мне код
Так как я напишу код для 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");

Ответ 4

Обратитесь к следующим ссылкам:

Вы не можете передать более трех аргументов, если вы хотите передать только один аргумент, тогда используйте void для двух других аргументов.

1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 


2. protected class InitTask extends AsyncTask<Context, Integer, Integer>

Асинхронная задача определяется вычислением, которое выполняется на фоновом потоке и результат которого публикуется в потоке пользовательского интерфейса. Асинхронная задача определяется тремя универсальными типами, называемыми Params, Progress и Result, и 4 шагами, называемыми onPreExecute, doInBackground, onProgressUpdate и onPostExecute.

KPBird

Ответ 5

  • Короче говоря, в AsyncTask есть 3 параметра

    1. параметры для использования ввода в DoInBackground (String... params)

    2. параметры для отображения статуса использования прогресса в OnProgressUpdate (String... status)

    3. параметры для использования результата в OnPostExcute (String... result)

    Примечание: - [Тип параметров может варьироваться в зависимости от ваших требований]