1

下面这部分代码<String, Void, Bitmap>是什么意思?我什至不知道这种语法叫什么。

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

}



这是原始代码(从这里找到:http: //developer.android.com/guide/components/processes-and-threads.html):

public void onClick(View v) {
    new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    /** The system calls this to perform work in a worker thread and
      * delivers it the parameters given to AsyncTask.execute() */
    protected Bitmap doInBackground(String... urls) {
        return loadImageFromNetwork(urls[0]);
    }

    /** The system calls this to perform work in the UI thread and delivers
      * the result from doInBackground() */
    protected void onPostExecute(Bitmap result) {
        mImageView.setImageBitmap(result);
    }
}
4

3 回答 3

6
AsyncTask<String, Void, Bitmap>

当您使用 AsyncTask 时,告诉 AsyncTask 由 3 种不同的类型描述,String 作为第一个参数,Void 作为第二个参数,Bitmap 作为第三个参数。

这在 Java 中称为泛型,从 Java5 开始引入。请阅读本教程以了解有关泛型的更多信息。这是关于 android AsyncTasktask 如何使用泛型的javadoc 。

更新:来自 AsyncTask javadoc

1) Params, the type of the parameters sent to the task upon execution.
2) Progress, the type of the progress units published during the background computation.
3) Result, the type of the result of the background computation.
于 2012-11-05T18:33:34.557 回答
2

它被称为Generics。以下是AsyncTask 手册中的详细信息:

异步任务使用的三种类型如下:

Params,执行时发送给任务的参数类型。

Progress,在后台计算期间发布的进度单元的类型。

Result,后台计算结果的类型。并非所有类型都始终由异步任务使用。

要将类型标记为未使用,只需使用类型 Void:

所以AsyncTask<String, Void, Bitmap>意味着,AsyncTask --DownloadImageTask接受参数为StringProgress类型为unused并返回结果为Bitmap

于 2012-11-05T18:38:53.983 回答
0

AsyncTask 是一个泛型类。您应该查看泛型教程以了解泛型的语法和语义。

如果您查看AsyncTask 文档,您将了解每个参数的含义。

  • 第一个标记为“params”,是您的 doInBackground 方法接受的类型。
  • 第二个是用于表示进度的类型,如 onProgressUpdate 方法中所采用的。
  • 第三个是任务的结果类型,从 doInBackground 返回并由 onPostExecute 接收的类型。
于 2012-11-05T18:36:38.647 回答