Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android AsyncTask Parameters

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?

like image 825
waylonion Avatar asked Feb 11 '26 05:02

waylonion


2 Answers

From the documentation it says using Void simply marks the type as unused. You don't have to have a type in AsyncTask.

The three types used by an asynchronous task are the following:

  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.

Not all types are always used by an asynchronous task. To mark a type as unused, simply use the type Void:

private class MyTask extends AsyncTask<Void, Void, Void> { ... }
like image 173
JRowan Avatar answered Feb 12 '26 20:02

JRowan


Well Async task parameters are simple,

First param : Array of object or single object which needed for background process.

Second param : Object type you are going to pass into to the onProgressUpdate

Third Param : The return type of doInBackground

example :-

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

ImageDownloader downloader = new ImageDownloader();
downloader.execute();
like image 22
Zumry Mohamed Avatar answered Feb 12 '26 18:02

Zumry Mohamed



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!