Android应用开发—AsyncTask
摘錄自 Android 多線程—–AsyncTask詳解
AsyncTask
AsyncTask:異步任務(wù),從字面上來說,就是在我們的UI主線程運(yùn)行的時候,異步的完成一些操作。AsyncTask允許我們的執(zhí)行一個異步的任務(wù)在后臺。我們可以將耗時的操作放在異步任務(wù)當(dāng)中來執(zhí)行,并隨時將任務(wù)執(zhí)行的結(jié)果返回給我們的UI線程來更新我們的UI控件。通過AsyncTask我們可以輕松的解決多線程之間的通信問題。
怎么來理解AsyncTask呢?通俗一點(diǎn)來說,AsyncTask就相當(dāng)于Android給我們提供了一個多線程編程的一個框架,其介于Thread和Handler之間,我們?nèi)绻x一個AsyncTask,就需要定義一個類來繼承AsyncTask這個抽象類,并實現(xiàn)其唯一的一個 doInBackgroud 抽象方法。要掌握AsyncTask,我們就必須要一個概念,總結(jié)起來就是: 3個泛型,4個步驟。
3個泛型指的是什么呢?我們來看看AsyncTask這個抽象類的定義,當(dāng)我們定義一個類來繼承AsyncTask這個類的時候,我們需要為其指定3個泛型參數(shù):
-
4個步驟:當(dāng)我們執(zhí)行一個異步任務(wù)的時候,其需要按照下面的4個步驟分別執(zhí)行
- onPreExecute():
這個方法是在執(zhí)行異步任務(wù)之前的時候執(zhí)行,并且是在UI Thread當(dāng)中執(zhí)行的,通常我們在這個方法里做一些UI控件的初始化的操作,例如彈出要給ProgressDialog - doInBackground(Params… params): 在onPreExecute()方法執(zhí)行完之后,會馬上執(zhí)行這個方法,這個方法就是來處理異步任務(wù)的方法,Android操作系統(tǒng)會在后臺的線程池當(dāng)中開啟一個worker thread來執(zhí)行我們的這個方法,所以這個方法是在worker thread當(dāng)中執(zhí)行的,這個方法執(zhí)行完之后就可以將我們的執(zhí)行結(jié)果發(fā)送給我們的最后一個 onPostExecute 方法,在這個方法里,我們可以從網(wǎng)絡(luò)當(dāng)中獲取數(shù)據(jù)等一些耗時的操作
- onProgressUpdate(Progess… values): 這個方法也是在UI Thread當(dāng)中執(zhí)行的,我們在異步任務(wù)執(zhí)行的時候,有時候需要將執(zhí)行的進(jìn)度返回給我們的UI界面,例如下載一張網(wǎng)絡(luò)圖片,我們需要時刻顯示其下載的進(jìn)度,就可以使用這個方法來更新我們的進(jìn)度。這個方法在調(diào)用之前,我們需要在 doInBackground 方法中調(diào)用一個 publishProgress(Progress) 的方法來將我們的進(jìn)度時時刻刻傳遞給 onProgressUpdate 方法來更新
- onPostExecute(Result… result): 當(dāng)我們的異步任務(wù)執(zhí)行完之后,就會將結(jié)果返回給這個方法,這個方法也是在UI Thread當(dāng)中調(diào)用的,我們可以將返回的結(jié)果顯示在UI控件上
為什么我們的AsyncTask抽象類只有一個 doInBackground 的抽象方法呢??原因是,我們?nèi)绻鲆粋€異步任務(wù),我們必須要為其開辟一個新的Thread,讓其完成一些操作,而在完成這個異步任務(wù)時,我可能并不需要彈出要給ProgressDialog,我并不需要隨時更新我的ProgressDialog的進(jìn)度條,我也并不需要將結(jié)果更新給我們的UI界面,所以除了 doInBackground 方法之外的三個方法,都不是必須有的,因此我們必須要實現(xiàn)的方法是 doInBackground 方法。
- onPreExecute():
總結(jié)
以上是生活随笔為你收集整理的Android应用开发—AsyncTask的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Selenium IDE工具界面剖析
- 下一篇: Java基于自定义注解的面向切面的实现