Android AsyncTask参数

时间:2015-12-28 00:51:31

标签: android android-asynctask

我无法理解在Android中使用Asynctask的参数。

Android开发者文档解释如下:

AsyncTask must be subclassed to be used.
 The subclass will override at least one method (doInBackground(Params...)),
   and most often will override a second one (onPostExecute(Result).)

以下是子类化的示例:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
            // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}

创建后,任务执行非常简单:

new DownloadFilesTask().execute(url1, url2, url3);

对于AsyncTask的扩展,我不需要传递任何参数,但我需要覆盖doInBackground()onProgressUpdate()onPostExecute()。为什么我必须将Void,Void,Void插入AsyncTask<>

参数有什么作用?

3 个答案:

答案 0 :(得分:1)

井异步任务参数很简单,

第一个参数:后台进程所需的对象或单个对象的数组。

第二个参数:您要传递给onProgressUpdate的对象类型

第三个参数:doInBackground的返回类型

示例: -

private class ImageDownloader extends AsyncTask<Void, Void, Void> {//todo}

ImageDownloader downloader = new ImageDownloader();
downloader.execute();

答案 1 :(得分:1)

从文档中说明使用Void只是将类型标记为未使用。您不必在AsyncTask中输入类型。

  

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

     
      
  1. Params,执行时发送给任务的参数类型。
  2.   
  3. 进度,后台计算期间发布的进度单位的类型。
  4.   
  5. 结果,背景计算结果的类型。
  6.         

    并非所有类型都始终由异步任务使用。标记类型   如果未使用,只需使用类型Void:

    private class MyTask extends AsyncTask<Void, Void, Void> { ... }
    

答案 2 :(得分:1)

如果不需要参数,则插入void void void。例如,当异步任务完成并且在onPostExecute中你只想更新视图并且它不依赖于结果doInBackground你可以将Void作为第三个参数。

我认为,如果异步任务是私有内部类,则优先使用参数,而不是在异步任务或实例变量中保存变量。