I'm having trouble understanding the use of the parameters for Asynctask in android.
The Android Developers documentation explains it as follows:
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).)
Here is an example of subclassing:
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");
    }
}
Once created, a task is executed very simply:
new DownloadFilesTask().execute(url1, url2, url3);
For my extension of AsyncTask, I don't need to pass in any parameters, but I need to override the doInBackground(), onProgressUpdate(), and onPostExecute(). Why do I have to insert Void,Void,Void into AsyncTask<>?
What do the parameters do?
 
     
     
     
    