Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android异步任务参数_Android_Android Asynctask - Fatal编程技术网

Android异步任务参数

Android异步任务参数,android,android-asynctask,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).) 下面是一个子类化示例

我很难理解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");
    }
}
对于
AsyncTask
的扩展,我不需要传入任何参数,但我需要重写
doInBackground()
onProgressUpdate()
onPostExecute()
。为什么我必须将
Void,Void,Void
插入
AsyncTask


参数的作用是什么?

那么异步任务参数很简单

第一个参数:后台处理所需的对象数组或单个对象

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

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

示例:-

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

ImageDownloader downloader = new ImageDownloader();
downloader.execute();
私有类ImageDownloader扩展异步任务{//todo}
ImageDownloader downloader=新的ImageDownloader();
downloader.execute();

从文档中可以看出,使用
Void
只是将该类型标记为未使用。你不必输入

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

  • Params,执行时发送到任务的参数类型
  • 进度,后台计算期间发布的进度单位的类型
  • 结果,背景计算结果的类型
  • 异步任务并不总是使用所有类型。打字 如果未使用,只需使用Void类型:

    private class MyTask extends AsyncTask<Void, Void, Void> { ... }
    
    私有类MyTask扩展了AsyncTask{…}
    

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


    但是,如果异步任务是一个私有的内部类,我认为最好使用参数,而不是在异步任务或实例变量中保存变量。

    这可能会对遇到这个问题的人有所帮助-
    private class MyTask extends AsyncTask<Void, Void, Void> { ... }