新建一个MyAsynTask.java文件,继承自AsyncTask。
public class MyAsynTask extends AsyncTask<String, Integer, String> {
/**
* 参数1:doInBackground:方法参数有关 参数2:onProgressUpdate:方法参数有关
* 参数3:doInBackground:方法的类型有关、onPostExecute:方法参数有关
*
*/
private TextView tv;
private ProgressBar pb;
// 构造方法
public MyAsynTask(TextView tv, ProgressBar pb) {
this.tv = tv;
this.pb = pb;
}
// 核心处理方法
@Override
protected String doInString... params) { // String... params:可变参数。params 参数为启动时传递的参数。
int i = 0;
for (i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//触发onProgressUpdate执行.传递的参数为onProgressUpdate方法中values数组的值
publishProgress(i);
}
return i+"";
}
// 当异步结束的时候触发此方法
@Override
protected void onPostExecute(String result) {
if (result != null) {
tv.setText("异步结束:" + result);
}
super.onPostExecute(result);
}
// 当异步开始的时候触发
@Override
protected void onPreExecute() {
System.out.println("异步开始了");
tv.setText("异步开始");
super.onPreExecute();
}
// 正在处理的时候出发。与UI主线程进行交互的
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
pb.setProgress(values[0]);
tv.setText("i="+values[0]);
}
}
在MainActivity中建一个Progressbar和Button按钮,点击按钮,进度条进度变化。
public class MainActivity extends Activity {
private Button btn;
private TextView tv;
private ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
tv = (TextView) findViewById(R.id.textView1);
pb = (ProgressBar) findViewById(R.id.progressBar1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyAsynTask myAsynTask = new MyAsynTask(tv, pb);
myAsynTask.execute("");// 启动方法
}
});
}
}
运行结果:(三幅图分别为运行前、中、后)
转载于:https://blog.51cto.com/shaotao/1287127