package com.google.mcommerce.sample.android.chapter06.asyncTask;
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;
import android.widget.TextView;
import com.google.mcommerce.sample.android.R;
public class AsyncTaskActivity extends Activity implements OnClickListener {
private Button Btn;
private TextView txt;
private int count = 0;
private boolean isRunning = false;
private ProgressBar progressBar;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.c06_async_task_test01);
Btn = (Button) findViewById(R.id.button1);
txt = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
Btn.setOnClickListener(this);
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
TimeTickLoad timetick = new TimeTickLoad();
timetick.execute(1000);
}
private class TimeTickLoad extends AsyncTask<Integer, Integer, String> {
// 后面尖括号内分别是参数(例子里是线程休息时间),进度(publishProgress用到),返回值 类型
@Override
protected void onPreExecute() {
// 第一个执行方法
super.onPreExecute();
txt.setText("开始执行后台操作...");
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(Integer... params) {
// 第二个执行方法,onPreExecute()执行完后执行
for (int i = 0; i <= 10; i++) {
publishProgress(i * 10);
try {
Thread.sleep(params[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "执行完毕";
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
// 这个函数在doInBackground调用publishProgress时触发,虽然调用时只有一个参数
// 但是这里取到的是一个数组,所以要用progesss[0]来取值
// 第n个参数就用progress[n]来取值
progressBar.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String result) {
// doInBackground返回时触发,换句话说,就是doInBackground执行完后触发
// 这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"
super.onPostExecute(result);
txt.setText(result);
}
}
}