關于Android AsyncTask的一些總結
//實現異步的內部類/ 第一個參數:String 傳入:在調用該類對象時傳入的參數 如:MyTask myTask=new MyTask(Context) myTask.execute(string) 調用:doInBackground(String... strings) strings是這個參數,通常用strings[0]使用 第二個參數:Integer 更新進度的參數 傳入:調用publishProgress(int);傳入 調用:onProgressUpdate(Integer... values)調用 values是這個參數,values[0]使用 第三個參數:外部線程doInBackground(String... strings)執行的結果,是 這個方法的返回值 傳入:給doInBackground()設置的返回值就是這個參數 調用:onPostExecute(String s)調用 s 是這個參數 / class MyTask extends AsyncTask< String, Integer, String > { private Context context; ProgressDialog pdialog; / 構造方法 可以在這初始化一些變量 / public MyTask(Context context){ this.context=context; } /** 該方法將在執行實際的后臺操作前被UI thread調用。 可以在該方法中做一些準備工作,如在界面上顯示一個進度條 / protected void onPreExecute() { pdialog=new ProgressDialog(context, 0); super.onPreExecute(); }
/* 該方法運行在后臺線程中。 這里將主要負責執行那些很耗時的后臺計算工作。 可以調用 publishProgress方法來更新實時的任務進度。 該方法是抽象方法,子類必須實現。 / protected String doInBackground(String... strings) { for(int i=0;i<100;i++){ try { //publishProgress這個方法 //會獲取實時進度傳遞給onProgressUpdate publishProgress(i); Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } }
return null; } /* 在publishProgress方法被調用后, UI thread將調用這個方法從而在界面上展示任務的進展情況, 例如通過一個進度條進行展示。 / protected void onProgressUpdate(Integer... values) { pdialog.setProgress(values[0]);//在這里更新進度條 }
/* 在doInBackground 執行完成后, onPostExecute 方法將被UI thread調用, 后臺的計算結果將通過該方法傳遞到UI thread. / protected void onPostExecute(String s) { //顯示結果的地方 super.onPostExecute(s); } }</pre>
運行順序:從上到下
onPreExecute()
doInBackground(String... strings)
onProgressUpdate(Integer... values) //在publishProgress方法被調用后才調用
onPostExecute(String s)