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]);

}

}

更多相关文章

  1. android 地图 MapView API Key 获取
  2. Android(安卓)& Java规范
  3. Android(安卓)StateMachine记录
  4. Android(安卓)监听前台后台切换
  5. 2011.09.23——— android sample之Notepad(context menu)
  6. Android(安卓)AudioRecord录音实现
  7. android > Android实现计时与倒计时的几种方法
  8. Android(安卓)Appium源码分析
  9. 非UI线程可不可以更新UI(一)

随机推荐

  1. android selector 背景选择器的使用, butt
  2. Android(安卓)屏幕适配:最全面的解决方案
  3. Android中显示网页的多种方式
  4. 关于android中使用new Message的内存泄露
  5. 如何发布你的Android应用程序
  6. android 中文乱码问题
  7. Android之布局
  8. 性能优化之Java(Android)代码优化
  9. android HAL简记
  10. 关于Android分辨率的支持