Android开发之AsyncTask的使用

来源:互联网 发布:博客系统源码 编辑:程序博客网 时间:2024/06/05 03:02

Android API 3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数

Params   调用execute时传入的参数,

Progress  需要显示的进度信息

Result   任务执行完毕后doInBackground的返回值

看下使用AsyncTask控制进度条的效果


代码实现

package com.example.asynctaskdemo;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;/** * AsyncTask的简单使用 *  * @author Administrator *  */public class MainActivity extends Activity {private ProgressBar pro = null;private Button start = null;private Button stop = null;private boolean isExe = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);pro = (ProgressBar) findViewById(R.id.progress);start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);final UpdatePro updatePro = new UpdatePro();// 开始任务start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (!isExe) {// 一个任务只能被执行一次,否则会报异常updatePro.execute();isExe = true;}}});// 结束任务stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (isExe) {updatePro.cancel(true);}}});}/** * 更新UI线程 *  * @author Administrator *  */class UpdatePro extends AsyncTask<Void, Integer, Boolean> {private int downloadPercent = 0;/** * 核心的操作 */@Overrideprotected Boolean doInBackground(Void... params) {// TODO Auto-generated method stubtry {while (true) {downloadPercent = downloadPercent + 10;// 把数据传给onProgressUpdate更新UIpublishProgress(downloadPercent);if (downloadPercent >= 300) {//downloadPercent = 0;break;}System.out.println("----- downloadPercent = "+ downloadPercent);Thread.sleep(10000);}} catch (Exception e) {return false;}return true;}/** * 获取doInBackground返回的结果 */@Overrideprotected void onPostExecute(Boolean result) {// TODO Auto-generated method stubSystem.out.println("--------------onPostExecute " + result);super.onPostExecute(result);}/** * 最先执行 初始化工作 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubSystem.out.println("--------------onPreExecute");pro.setProgress(0);super.onPreExecute();}/** * 得到publishProgress传入的值,更新UI */@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubSystem.out.println("--------------onProgressUpdate  " + values[0]);pro.setProgress(values[0]);super.onProgressUpdate(values);}}}

Demo下载

点击打开链接