(借鉴自:http://blog.csdn.net/liuhe688/article/details/6532519)
Handler的代码比较臃肿,而且在多任务时逻辑也不太清晰,所以采用AsyncTask。
public abstract class AsyncTask<Params, Progress, Result> { }
Params,启动任务时传入的参数
Progress,后台任务完成的进度
Result,后台计算的结果类型
private class MyTask extends AsyncTask<String, Integer, String> { //onPreExecute方法用于在执行后台任务前做一些UI操作 @Override protected void onPreExecute() { } //doInBackground方法内部执行后台任务,不可在此方法内修改UI @Override protected String doInBackground(String... params) { //调用publishProgress公布进度,最后onProgressUpdate方法将被执行,更新进度相关的UI publishProgress((int) ((count / (float) total) * 100)); return null; } //onProgressUpdate方法用于更新进度信息 @Override protected void onProgressUpdate(Integer... progresses) { progressBar.setProgress(progresses[0]); textView.setText("loading..." + progresses[0] + "%"); } //onPostExecute方法用于在执行完后台任务后更新UI,显示结果 @Override protected void onPostExecute(String result) { textView.setText(result); } //onCancelled方法用于在取消执行中的任务时更改UI @Override protected void onCancelled() { textView.setText("cancelled"); progressBar.setProgress(0); } }
调用
mTask = new MyTask(); mTask.execute("http://www.baidu.com");