2014年4月1日

【Android】AsyncTask多執行緒架構說明與範例實作

各位Android安卓開發者大家好!!!

小黑人今天要與大家分享的主題就是AsyncTask,哈!其實小黑人本身是蠻喜歡用AsyncTask的,像在API串接時網路下載時讀取資料時都可以使用到這個元件,而多執行緒的意思就是讓程式可以繼續執行,以不卡住運作流程的前提下開立另一個執行目的流程,雖然AsyncTask其實也是由ThreadHandler其他元件所組成的多執行緒,但小黑人就覺得AsyncTask很簡而易懂,何時該處理什麼事都可以很清楚明白,所以這篇文章就是與大家分享說明AsyncTask這個多執行緒所組成的架構介紹,讓我們繼續看下去吧!

小黑人就直接以實作的例子裡向大家說明AsyncTask的架構吧!

1. 首先建立多執行緒DemoAsyncTask並帶入String字串 :
new DemoAsyncTask().execute("小黑人的Android教室","AsyncTask","Pubby");

2. 說明DemoAsyncTask的架構 :

    //AsyncTask<doInBackground傳入的類型,onProgressUpdate傳入的類型,onPostExecute傳入的類型>
    private class DemoAsyncTask extends AsyncTask<String, Integer, Boolean>
    {
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
             //執行前進入,可在此加入ProgressDialog或一些畫面上的處裡動作
         }
 
        @Override
        protected Boolean doInBackground(String... text)
        {
            //背景執行緒開始執行,不能處理有關畫面View的動作
            //傳入的參數為呼叫DemoAsyncTask時帶入的String陣列
            //ex.若傳入一個字串,取得字串為text[0]
            //ex.若傳入三個字串,取得字串為text[0],text[1],text[2]

           
            //簡單撰寫呼叫onProgressUpdate的Loading範例,若不需要可省略
            int mLoading = 0;
            //若進度未達100則持續在while迴圈內
            while(mLoading < 100)
            {
                //呼叫onProgressUpdate,帶入目前的進度值
                publishProgress(mLoading);
                mLoading++;
            }
   
            //回傳布林狀態至onPostExecute
            return true;
        }


        @Override
        protected void onProgressUpdate(Integer... values)
        {
            super.onProgressUpdate(values);
            //配合doInBackground的更新狀態,此可處理畫面View的動作
            //values為陣列,若取出Loading進度數值為values[0]
        }

        @Override
        protected void onPostExecute(Boolean result)
        {
            super.onPostExecute(result);
            //執行完畢進入,可以處裡畫面View動作
            //result為doInBackground傳入的結果,可判斷此多執行緒為成功或失敗
        }

        @Override
        protected void onCancelled()
        {
            super.onCancelled();
            //正常狀態下不會被觸發,若此執行緒被取消或例外發生時則被呼叫
        }
}


以上就是AsyncTask的說明介紹,相信大家都對這個元件有更深入的了解,可以試試實作喔!
謝謝大家,如有任何問題都可以和小黑人一起交流討論!


☆小黑人☆

沒有留言:

張貼留言

謝謝大家支持,有任何問題都可以和小黑人一起討論!