Android異步操作AsyncTask – Android移動開發技術文章_手機開發 Android移動開發教學課程

前面一篇是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");
    }
}

作者“啊迪”
 

發佈留言