AsyncTask案列
实现步骤:
① 创建Activity,布局xml ProgressBar
② 添加事件处理给备份按钮
③ 创建AsyncTask任务
④ 任务前显示进度条 (onPreExecute())
⑤ 任务中更新进度 (doInBackground(Void... params),onProgressUpdate(Integer... values))
⑥ 任务后就隐藏进度条 (onPostExecute(Void result))
public class BackUpActivity extends Activity {
private Button start = null;
private TextView textProgress = null;
private ProgressBar progressBar = null;
private boolean isRunning = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// ① 创建Activity,布局xml ProgressBar
setContentView(R.layout.activity_backup);
// ② 添加事件处理给备份按钮
start = (Button)findViewById(R.id.start);
textProgress = (TextView) findViewById(R.id.text_progress);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
start.setOnClickListener(new OnClickListener() {
② 添加事件处理给备份按钮
@Override
public void onClick(View v) {
if (isRunning) {//是为防止用户不停的点击Button,不停调用onClick方法
return;//返回
}
isRunning=true;
③ 创建AsyncTask任务
// new AsyncTask<Void, Integer,进度 一般为intVoid>(){
new AsyncTask<Void, Integer, Void>(){
private int num = 100;
private int progress = 0;
// 任务前。。
protected void onPreExecute() {
textProgress.setText("0/" + num);
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(0);
progressBar.setMax(num);
progress = 0;
};
// 任务中..
@Override
protected Void doInBackground(Void... params) {//运行在子线程中
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
progress++;
// 发布进度
publishProgress(progress);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
// ⑤ 任务中更新进度
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
textProgress.setText(values[0] + "/" + num);//value[0]发布进度中的progress
progressBar.setProgress(values[0]);
}
// ⑥ 任务后就隐藏进度条
protected void onPostExecute(Void result) {
textProgress.setText("备份完成" + num);
progressBar.setVisibility(View.GONE);
isRunning=false;
};
}.execute();
// new Thread().start();
}
});
}
}