哪些参数被传递到 AsyncTask < arg1,arg2,arg3 > ?

我不明白我应该在这里写些什么以及这些争论的结果是什么?我到底应该放什么,它到底会放在哪里?我需要包括所有3个还是可以包括1,2,20?

115030 次浏览

请参阅以下连结:

  1. Http://developer.android.com/reference/android/os/asynctask.html
  2. Http://labs.makemachine.net/2010/05/android-asynctask-example/

不能传递多于三个参数,如果只想传递一个参数,那么对其他两个参数使用 void。

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




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

异步任务由在后台线程上运行的计算定义,其结果在 UI 线程上发布。一个异步任务由3种通用类型(称为 Params、 Progress 和 Result)和4个步骤(称为 onPreExecute、 doInBack、 onProgressUpdate 和 onPostExecute)定义。

谷歌的 Android 文档说:

一个异步任务由3种通用类型(称为 Params、 Progress 和 Result)和4个步骤(称为 onPreExecute、 doInBack、 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

或者您可以通过引用 Sankar-Ganesh 的博客来清除 AsyncTask 的角色

典型的 AsyncTask 类的结构是这样的:

private class MyTask extends AsyncTask<X, Y, Z>


protected void onPreExecute(){


}

此方法在启动新的 Thread 之前执行。没有输入/输出值,所以只需初始化变量或者您认为需要做的任何事情。

    protected Z doInBackground(X...x){


}

AsyncTask 类中最重要的方法。你必须把所有想做的事情放在后台,放在和主线程不同的线程里。这里我们有一个来自“ X”类型的对象数组作为输入值(你看到头部了吗?)?我们有“ ... 扩展 AsyncTask”,这些是输入参数的 TYPES) ,并从类型“ Z”返回一个对象。

   protected void onProgressUpdate(Y y){


}

这个方法是使用 PublishProgress (y)方法调用的,它通常用于在主屏幕上显示任何进度或信息的时候,比如在后台显示操作进度的进度条。

  protected void onPostExecute(Z z){


}

此方法在后台操作完成后调用。作为一个输入参数,您将接收 doIn 背景方法的输出参数。

那么 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 的输入参数。

一旦我们的任务运行起来,我们就可以从“外部”找到它的状态。

 myTask.getStatus();

我们可以得到以下状态:

运行 -表示任务正在运行。

PENING -指示任务尚未执行。

FINISHED -表示 onPostExecute (Z)已完成。

关于使用 AsyncTask 的提示

  1. 不要手动调用 onPreExecute、 doInBack 和 onPostExecute 方法。这是由系统自动完成的。

  2. 不能在另一个 AsyncTask 或线程内调用 AsyncTask。方法执行的调用必须在 UI 线程中完成。

  3. OnPostExecute 方法在 UI 线程中执行(在这里您可以调用另一个 AsyncTask!)。

  4. 任务的输入参数可以是 Object 数组,这样您就可以放置任何您想要的对象和类型。

我来晚了,但我想这个可能会有帮助。

  • 简而言之,AsyncTask 中有3个参数

    1. 在 DoInBack 中用于输入的参数(String... params)

    2. 用于显示 OnProgressUpdate 中进度状态的参数(String... status)

    3. OnPostExcute (String... result)中用于结果的参数

    注意:-[参数的类型可以根据您的需求而变化]

简单点!

AsyncTask是在后台线程中运行的后台任务,它接受一个 输入,执行 进步并给出 输出

AsyncTask<Input,Progress,Output>

在我看来,当我们试图记住 AsyncTask中的参数时,主要的困惑来自于。
关键是 别记了
如果你能想象出你的任务真正需要做什么,那么用正确的签名书写 AsyncTask将是小菜一碟。
只要弄清楚你的 输入进步输出是什么,你就可以开始了。

例如: enter image description here

异步任务之心!

doInBackgound()方法是 AsyncTask中最重要的方法,因为

  • 只有此方法在后台线程中运行并将数据发布到 UI 线程。
  • 它的签名随着 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");