1. 程式人生 > >Android AsyncTask原理分析_At_Smim

Android AsyncTask原理分析_At_Smim

這篇文章能讓你簡單的瞭解AsyncTask的非同步原理

Android從1.5版本引入AsyncTask類

AsyncTask可以靈活方便的從子執行緒切換到UI執行緒。

AsyncTask是一個抽象類,想要使用它就必須建立一個類去繼承它。

1.在執行AsyncTask的時候我們需要傳入三個泛型引數。

        1.Params()

                在執行AsyncTask的時候用於在後臺任務中使用(這個是耗時操作所需要的引數)。

        2.Progress()

                在執行AsyncTask的時候如果需要在介面上顯示當前的進度,就使用這個泛型引數做為進度型別。

        3.Resule()

                在任務執行完畢後如果需要返回結果,就使用這個泛型引數去做返回值型別。

2.實現AsyncTask我們會重寫AsyncTask的四個方法。

        1.onPreExecute()

                這個方法會在後臺任務開始執行之間呼叫,用於進行一些介面上的初始化操作,比如顯示一個進度條對話方塊等。

        2.doInBackground()

                這個方法中的程式碼都會在子執行緒中執行,我們應該在這裡去處理所有的耗時任務,

                任務一旦完成就可以通過return語句來將任務的執行結果進行返回。

                注:在這個方法中是不可以進行UI操作,想要更行UI可以呼叫publishProgress()方法來完成。

        3.onProgressUpdate()

                當在後臺任務中呼叫了publishProgress()方法後,這個方法就很快會被呼叫,方法中攜帶的引數就是在後臺

                任務中傳遞過來的,在這個方法中可以對UI進行操作,利用引數中的數值就可以對介面元素進行相應的更新。

        4.onPostExecute()

                當後臺任務執行完畢並通過return語句進行返回時,這個方法就很快會被呼叫,        

                返回的資料就會作為引數傳遞到此方法中,可以利用返回的資料進行一些UI的操作,比如提醒任務執行的結果

                以及關閉掉進度條對話方塊等。

使用AsyncTask我們並不需要去考慮非同步訊息處理機制,也不需要專門使用一個Handler來發送和接收訊息,

 只需要呼叫publishProgress()方法就可以輕鬆的從子執行緒切換到UI執行緒了。

相信看到這裡你已經對AsyncTask已經有了一個很大的瞭解了