新建一个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("");// 启动方法 } }); } }
运行结果:(三幅图分别为运行前、中、后)