AsyncTask是android提供的异步操作类下面看一下他是怎么实现异步操作的:
首先新建一个异步操作类AsynTask:
import android.os.AsyncTask;
import android.util.Log;
import android.widget.EditText;
import android.widget.ProgressBar;
/**
* 异步任务
* @author dengliang
* @last_edit_date 2014年12月4日
* @last_edit_message
*/
public class AsynTask extends AsyncTask<Integer,Integer,String> {
private static final String TAG="AsynTask";
private EditText editText;//显示异步操作进度文字信息
private ProgressBar progressBar;//显示异步操作进度条(动态的)
public AsynTask(EditText editText,ProgressBar bar ) {
super();
// TODO Auto-generated constructor stub
Log.e(TAG,"came into constructor");
this.editText=editText;
this.progressBar=bar;
}
/**
* 传进去的Integer 对应AsyncTask<Integer,Integer,String>第一个参数
* publicProgress()中的参数类型对应第二个参数
* 返回值String 对应第三个参数
* 调用publishProgress方法触发onProgressUpdate对UI进行操作
*/
@Override
protected String doInBackground(Integer... arg0) {
// TODO Auto-generated method stub
Log.e(TAG,"doInBackground(Integer... arg0)");
int i;
for(i=10;i<=100;i+=10){
NetOperation.operation();
publishProgress(i,i+arg0[0].intValue());
}
return i+arg0[0].intValue()+"";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.e(TAG,"onPostExecute");
editText.setText("异步操作执行结束"+result);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.e(TAG,"onPreExecute()");
editText.setText("异步操作执行开始");
}
/*响应publicProgress()*/
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
Log.e(TAG,"onProgressUpdate");
int value=values[0];
progressBar.setProgress(value);
}
}
新建一个耗时操作类NetOperation:
/**
* 模拟类似下载文件这种耗时的操作
* @author dengliang
* @last_edit_date 2014年12月4日
* @last_edit_message
*/
public class NetOperation {
public static void operation(){
try {
Thread.sleep(1000);//进程休息1s
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后在自己的主Activity中添加一个EditText host和一个ProgressBar progressBar加一个按键Button button2添加监听:
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.e(TAG,"new a asyntask");
AsynTask asynTask=new AsynTask(host, progressBar);
Log.e(TAG,"start asynTask");
asynTask.execute(1000);
}
});
运行后点击button2效果如下:
刚点下set按钮后:
异步任务执行过程中:()进度条在加载:
异步任务结束后:
总结一下异步任务AsyncTask的各个方法执行顺序:
onPreExecute-->doInBackground-->onPostExecute(开始,中间,结束)