All about AsyncTask
AsyncTask can be useful in situations when
there is a need for doing a long task like calling Web service and
then show it in the UI as soon as it is finished. AsyncTask enables proper
and easy use of the UI thread. This class allows to perform background operations
and publish results on the UI thread without having to manipulate threads
and/or handlers. An AsyncTask runs on a background thread and the result is
published on the UI. An asynchronous task is defined by 3 generic types,
called
Params
, Progress
and Result
, and 4 steps, called onPreExecute
, doInBackground
, onProgressUpdate
and onPostExecute
.
When using AsyncTask make an internal class which extend AsyncTask class. You should override atleast one method of AsyncTask (doInBackground).
private
class
DownloadTask
extends
AsyncTask<String,
Void, String> {
//
Run on UI thread
@Override
protected
void
onPreExecute()
{
//
do initialization
}
//
Run on Background thread
@Override
protected
String doInBackground(String... urls)
{
publishProgress(progress
value);
//
task which you want to do in background
return
response;
}
//
Run on UI thread
protected
void
onProgressUpdate(Integer... progress) {
//
do the progress update here
}
//
Run on UI thread
@Override
protected
void
onPostExecute(String result)
{
//
get the response and do what you want
}
}
Execute
it like this:
new
DownloadTask().execute(var1,
var2,
var3);
You
can cancel a task anytime by invoking cancel(boolean)
AsyncTask's generic types
The
three types used by an asynchronous task are the following:
- Params, the type of the parameters sent to the task upon execution.
Progress
, the type of the progress units published during the background computation.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> { ... }
The 4 Steps
When
an asynchronous task is executed, the task goes through 4 steps:
onPreExecute()
, invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface.doInBackground(Params...)
, invoked on the background thread immediately afteronPreExecute()
finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also usepublishProgress(Progress...)
to publish one or more units of progress. These values are published on the UI thread, in theonProgressUpdate(Progress...)
step.onProgressUpdate(Progress...)
, invoked on the UI thread after a call topublishProgress(Progress...)
. The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.onPostExecute(Result)
, invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.
Rules to execute AsyncTask
- The task instance must be created on the UI thread.
execute(Params...)
must be invoked on the UI thread.- Do
not call
onPreExecute()
,onPostExecute(Result)
,doInBackground(Params...)
,onProgressUpdate(Progress...)
manually. - The task can be executed only once (an exception will be thrown if a second execution is attempted.)
Comments
Post a Comment