Android AsyncTask(异步) 操作使用
1、Main类
public class Main extends Activity {
private Button buttonNet;
private Button buttonPrint;
private TextView textView;
private ProgressBar progressBar;
ProgressAsync progressAsync;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonNet = (Button)findViewById(R.id.buttonNet);
buttonPrint = (Button)findViewById(R.id.buttonPrint);
textView = (TextView)findViewById(R.id.textView);
progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);
buttonNet.setOnClickListener(btnNet);
buttonPrint.setOnClickListener(btnPrint);
}
/**
* 用户离开屏幕,取消异步任务
*/
@Override
protected void onPause() {
if (progressAsync != null && progressAsync.getStatus() != AsyncTask.Status.FINISHED) {
progressAsync.cancel(true);
}
}
private OnClickListener btnNet = new OnClickListener() {
@Override
public void onClick(View v) {
/*NetOpertor opertor = new NetOpertor();
opertor.operate();*/
progressAsync = new ProgressAsync(textView,progressBar);
progressAsync.execute(1000);
}
};
private OnClickListener btnPrint = new OnClickListener() {
int i = 1;
@Override
public void onClick(View v) {
textView.setText("输出信息===="+i++);
}
};
}
2、NetOpertor类
/**
* 线程控制
* @author XP
*
*/
public class NetOpertor {
public void operate(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3、ProgressAsync执行异步操作
/**
* 执行异步操作
* @author XP
*
*/
public class ProgressAsync extends AsyncTask<Integer, Integer, String> {
private TextView view;
private ProgressBar progressBar;
public ProgressAsync(TextView view,ProgressBar progressBar) {
this.view = view;
this.progressBar = progressBar;
}
//第二步 在后台运行,所有的实际工作都是在其中完成的
@Override
protected String doInBackground(Integer... params) {
NetOpertor opertor = new NetOpertor();
for (int i = 10; i <= 100; i+=10) {
opertor.operate();
//调用第三步
publishProgress(i);
}
return "执行完毕";
}
//第1步 在后台处理开始前,这个方法在UI线程中运行,可显示进度指示器
@Override
protected void onPreExecute() {
view.setText("开始执行异步操作......");
}
//第四步 后台处理结束时,这个方法在UI线程中运行
@Override
protected void onPostExecute(String result) {
view.setText(result);
}
//第三步 每当doInBackground调用publishProgress时,都会在UI线程中运行这个方法,它接收后台处理提供的信息,可使用它更新用户看到的ProgressBar控件
@Override
protected void onProgressUpdate(Integer... values) {
progressBar.setProgress(values[0]);
}
}