android学习之异步任务AsyncTask

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 {
	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第一个参数
 * 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按钮后:

android学习之异步任务AsyncTask_第1张图片

异步任务执行过程中:()进度条在加载:

android学习之异步任务AsyncTask_第2张图片android学习之异步任务AsyncTask_第3张图片


异步任务结束后:

android学习之异步任务AsyncTask_第4张图片

总结一下异步任务AsyncTask的各个方法执行顺序:

onPreExecute-->doInBackground-->onPostExecute(开始,中间,结束)
 





你可能感兴趣的:(android)