編輯:關於android開發
AsyncTask作為一個比Handler好用的消息處理類,掌握它是必須的,廢話少說,直接往下看!
-----------------------------------------------------------------------------------------------------------------
AsyncTask 是一個抽象類(public abstract class AsyncTask extends Object),如果想使用它的話,我們必須創建一個子類去繼承它。
看一下這個抽象類:android.os.AsyncTask<Params, Progress, Result>,指定了三個泛型參數,我們先分析一下這三個參數:
1. Params:在執行AsyncTask時需要傳入的參數,可用於在後台任務中使用,這麼說不懂?ok,下面代碼會告訴你怎麼用.
new DownloadTask().execute(params) --> doInBackground(Integer... params) // 這邊的Integer可以自定義
2. Progress:後台任務執行時,如果需要在界面上顯示當前的進度,則使用這裡指定的泛型作為進度單位。
3. Result:當任務執行完畢後,如果需要對結果進行返回,則使用這裡指定的泛型作為返回值類型,比如我們常使用Boolean或String類型作為返回類型。
Notice:這三個參數是泛型參數,也就是說參數類型是根據要求傳入的,所以在方法的使用過程中,一定要清晰參數類型的設定和使用。
這裡給出一個最簡單的自定義AsyncTask的方式:
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
......
}
當然,定義完一個繼承AsyncTask的子類後,我們還需要覆寫AsyncTask的幾個方法:
1. onPreExecute()
2. doInBackground(Params...)
3. onProgressUpdate(Progress...)
4. onPostExecute(Result)
下面,我們就這4個方法的使用流程作一個詳細的介紹:
onPreExecute():這個方法顧名思義,就是在異步任務處理之前需要執行的操作,那麼它操作什麼?簡單的說就是進行一些界面上的初始化操作,比如:顯示一個進度條對話框等。這個方法不是我們的重點方法,但是在使用過程中巧妙使用可以增強界面的可觀性。
Java代碼doInBackground(Params...):這個就是AsyncTask中最為重要的方法了,因為這個方法中的所有代碼都會在子線程中運行,我們也是在這個方法中去處理所有的耗時任務。
直接看代碼:
Java代碼通過以上的代碼,我們可以發現:任務一旦完成就可以通過return語句來將任務的執行結果返回,如果AsyncTask的第三個泛型參數被指定的是Void,就可以不返回任務執行結果。
在這個方法中是不可以進行UI操作的(子線程是無法對主線程進行修改的),如果需要更新UI元素的話,就需要調用publishProgress(Progress...)方法來完成了。
onProgressUpdate(Progress...):當在後台任務中調用了publishProgress(Progress...)方法後,這個方法就會很快被調用,此方法中的參數是從哪邊傳來的,我想不需要解釋了吧。
在這個方法中,可以對UI進行操作,利用參數中的數值就可以對界面元素進行相應地更新,為什麼?上代碼!
Java代碼onPostExecute(Result):這個函數就是來執行return返回後的一些操作的,我們直接看下代碼,就能理解。
Java代碼那麼,問題來了,我們定義好了類、同時覆寫了各種方法,但是如何啟動它?
如果想要啟動這個任務,只需編寫一行代碼:new DownloadTask().execute();
Java代碼Android V7包學習筆記更新中..... 關於V4 V7 V13 VX包介紹轉自這裡 1, Android Support V4, V7, V13是什麼
Android draw9patch 圖片制作與使用,理解一下4句話: 下面我拿6張圖片分別舉例說明: 1.QQ多彩氣泡 聊天對話框也用.9
對於任何軟件來說,美觀的界面都是用戶體驗的重要組成部分,它能提高整個軟件的品質
新聞客戶端應用項目源碼,客戶端項目源碼 基於百度數據,一個非常好用的新聞客戶端。 <ignore_js_op> 源