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已經有了一個很大的瞭解了