前面一篇是Thread+Handler更新UI操作, Android有提供一个相对轻量级的AsyncTask,主要用于一些简单的逻辑操作更新UI.
public class ProAT extends AsyncTask<String, Integer, String>{
/*
* 第一个参数为doInBackground传入的参数,
* 第二个参数为onProgressUpdate传入参数,由doInBackground内调用publishProgress(Interger)传值;
* 第三个为doInBackground返回值和onPostExecute传入的参数。
*/
@Override
protected void onPreExecute() {
//该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上转菊花提示
System.out.println("onPreExecute--->Task start");
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
//将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。
//这里将主要负责执行那些很耗时的后台计算工作。
System.out.println("doInBackground---->");
try {
Thread.sleep(5000);
//可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
publishProgress(1);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
return "doInBackground";
}
@Override
protected void onProgressUpdate(Integer... values) {
System.out.println("更新进度"+values[0]);
//在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
// 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread
//用于更新UI
System.out.println("onPostExecute----->"+result);
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
//当用户取消操作时.
super.onCancelled();
}
}
主线程调用
public class AsyncTaskActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ProAT pro = new ProAT();
//execute必须在主线程调用
pro.execute("url");
}
}