各位Android安卓開發者大家好!!!
小黑人今天要與大家分享的主題就是AsyncTask,哈!其實小黑人本身是蠻喜歡用AsyncTask的,像在API串接時或網路下載時或讀取資料時都可以使用到這個元件,而多執行緒的意思就是讓程式可以繼續執行,以不卡住運作流程的前提下開立另一個執行目的流程,雖然AsyncTask其實也是由Thread與Handler其他元件所組成的多執行緒,但小黑人就覺得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的說明介紹,相信大家都對這個元件有更深入的了解,可以試試實作喔!
謝謝大家,如有任何問題都可以和小黑人一起交流討論!
☆小黑人☆
沒有留言:
張貼留言
謝謝大家支持,有任何問題都可以和小黑人一起討論!