前面一篇是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");
}
}
作者“啊迪”