AsyncTask class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers. Complexity involved in creating thread to do background operation and updating main UI thread been resoved in AsyncTask.
AsyncTask must be subclassed to use.
private class MyTask extends AsyncTask < Params, Progress, Result >
An asynchronous task is defined by 3 generic types, called
AsyncTask must be subclassed to use.
private class MyTask extends AsyncTask < Params, Progress, Result >
An asynchronous task is defined by 3 generic types, called
Params
, Progress
and Result
, and 4 steps, called onPreExecute
, doInBackground
, onProgressUpdate
andonPostExecute
.
public class AsyncTest extends Activity { private TextView _percentField; private Button _cancelButton; private MyTask _myTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //include text and button widgets in main layout. _percentField = ( TextView ) findViewById( R.id.percent_field ); _cancelButton = ( Button ) findViewById( R.id.cancel_button ); _cancelButton.setOnClickListener( new CancelButtonListener()); _myTask = new MyTask(); _myTask.execute( this ); } private class CancelButtonListener implements View.OnClickListener{ public void onClick(View v) { //onCancelled gets called after this. _myTask.cancel(true); } } private class MyTask extends AsyncTask < Context, Integer, String > { @Override protected String doInBackground(Context... params) { Log.i("AsyncTest", "doInBackground()"); int i = 0; while( i <= 50 ){ try{ Thread.sleep( 50 ); //publishes the UI thread: onProgressUpdate gets called publishProgress( i ); i++; } catch( Exception e ){ Log.i("AsyncTest", e.getMessage() ); } } //return value passes to onPostExecute method return "COMPLETE!"; } @Override protected void onCancelled() { Log.i("AsyncTest", "onCancelled()"); super.onCancelled(); _percentField.setText( "Cancelled!" ); _percentField.setTextColor( 0xFFFF0000 ); } //onPostExecute method runs in UI thread after doInBackground //method returns //@result - return value of doInBackground @Override protected void onPostExecute(String result) { Log.i("AsyncTest", "onPostExecute()"); super.onPostExecute(result); _percentField.setText( result ); _percentField.setTextColor( 0xFF69adea ); _cancelButton.setVisibility( View.INVISIBLE ); } //When ever publishProgress method been called inside doInBackground - //onProgressUpdate method runs in UI thread(can update UI) //@ Integer... values - second parameter in MyTask @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.i( "AsyncTest", "onProgressUpdate(): " + String.valueOf( values[0] ) ); _percentField.setText( ( values[0] * 2 ) + "%"); _percentField.setTextSize( values[0] ); } } }
0 comments:
Post a Comment