AsyncTask学习

今天学习AsyncTask的使用方法,自己写了一个异步更新对话框的小例子。

学习贴:http://lichen.blog.51cto.com/697816/486868

 

重点:AsyncTask的执行过程:

1:onPreExecute();在主线程中调用myTask.execute()后在AsyncTask中第一个执行的方法,由此开始异步线程;

2:doInBackground(Params...);第二步执行的方法,此方法为线程主体,线程参数也由此方法接收。在执行过程中可以用publishProgress(Progress...)间接调用3号方法(调用是异步的)更新任务的进度。本方法返回值为4号方法的入参。

3:onProgressUpdate(Progress...);在此方法中可以调用UI线程更新任务进度,例如进度条更新。

4:onPostExecute(Result);当2号方法返回时,将计算结果递给UI线程。

 

代码:

package com.wjr.AsyncTaskSample; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AsyncTaskSample extends Activity { /** Called when the activity is first created. */ ProgressDialog dialog = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dialog = new ProgressDialog(this); Button button = (Button) findViewById(R.id.start); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new MyTask().execute("start"); } }); } class MyTask extends AsyncTask<String, String, String>{ @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub dialog.setMessage(result); super.onPostExecute(result); } @Override protected void onPreExecute() { // TODO Auto-generated method stub dialog.show(); super.onPreExecute(); } @Override protected void onProgressUpdate(String... values) { // TODO Auto-generated method stub dialog.setMessage("Progress:"+values[0]); super.onProgressUpdate(values); } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub dialog.setMessage(params[0]); for(int i=0;i<5;i++){ try { Thread.sleep(1000); publishProgress(""+i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return "End"; } } } 

你可能感兴趣的:(UI,String,Class,dialog,任务,button)