AsyncTask的基本使用和各個參數的說明


AsyncTask 的執行分為四個步驟,每一步都對應一個回調方法,需要注意的是這些方法不應該由應用程序調用,開發者需要做的就是實現這些方法。在任務的執行過程中,這些方法被自動調用。

    * onPreExecute() 當任務執行之前開始調用此方法,可以在這里顯示進度對話框。 
    * doInBackground(Params...) 此方法在后台線程 執行,完成任務的主要工作,通常需要較長的時間。在執行過程中可以調用publicProgress(Progress...)來更新任務的進度。 
    * onProgressUpdate(Progress...) 此方法在主線程 執行,用於顯示任務執行的進度。 
    * onPostExecute(Result) 此方法在主線程 執行,任務執行的結果作為此方法的參數返回。

    1.  AsyncTask的三個泛型參數說明(三個參數可以是任何類型) 
      class BitmapWorkTask extends AsyncTask<Integer,Integer,Bitmap>{...}
    2.     第一個參數:傳入doInBackground()方法的參數類型 
    3.     第二個參數:傳入onProgressUpdate()方法的參數類型 
    4.     第三個參數:傳入onPostExecute()方法的參數類型,也是doInBackground()方法返回的類型
        @Override
        protected Bitmap doInBackground(Integer... integers) {
            data = integers[0];
            return decodeSampleBitmapFromResources(getResources(),data,100,100);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            if (weakReference != null && bitmap != null) {
                final ImageView imageView = (ImageView) weakReference.get();
                if (imageView != null) {
                    imageView.setImageBitmap(bitmap);
                }
            }
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

 

為了正確的使用AsyncTask類,以下是幾條必須遵守的准則: 
  1) Task的實例必須在UI thread中創建 
  2) execute方法必須在UI thread中調用 
  3) 不要手動的調用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法 
  4) 該task只能被執行一次,否則多次調用時將會出現異常 
      doInBackground方法和onPostExecute的參數必須對應,這兩個參數在AsyncTask聲明的泛型參數列表中指定,第一個為doInBackground接受的參數,第二個為顯示進度的參數,第第三個為doInBackground返回和onPostExecute傳入的參數。

        BitmapWorkTask task = new BitmapWorkTask(imageView);
        task.execute(resId);

 

然后基本就完成了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM