Android之AsyncTask詳解

異步任務(wù)(AsyncTask)

AsyncTask我們通常會將耗時的操作放在單獨的線程執(zhí)行,避免其占用主線程而給用戶帶來不好的用戶體驗。但是在子線程中無法去操作主線程(UI線程),在子線程中操作UI線程會出現(xiàn)錯誤.
android提供了一個類Handler來在子線程中來更新UI線程,用發(fā)消息的機制更新UI界面,呈現(xiàn)給用戶時的任務(wù)操作總會啟動一些匿名的子線程,太多的子線程給系統(tǒng)帶來巨大的負擔(dān),隨之帶來一些性能問題。
因此android提供了一個工具類AsyncTask,顧名思義異步執(zhí)行任務(wù).不再需要子線程和Handler就可以完成異步操作并且刷新用戶界面。

AsyncTask

AsyncTask,異步任務(wù),可以簡單進行異步操作,并把執(zhí)行結(jié)果發(fā)布到UI主線程。AsyncTask是一個抽象類,它的內(nèi)部其實也是結(jié)合了Thread和Handler來實現(xiàn)異步線程操作,但是它形成了一個通用線程框架,更清晰簡單。
AsyncTask應(yīng)該被用于比較簡短的操作(最多幾秒鐘)。
如果需要保持長時間運行的線程,可以使用ThreadPooExecutor或者FutureTask,關(guān)于這兩個類的內(nèi)容,以后再介紹,本篇主要介紹AsyncTask。

AsyncTask被定義為一個操作,運行在一個后臺線程中,其結(jié)果被發(fā)布在UI線程上。
它的異步工作的參數(shù)與返回值被泛型的三個參數(shù)指定:Params、Progress、Result。

AsyncTask將經(jīng)歷4個步驟:onPreExecute、doInBackground、 onProgressUpdate、onPostExecute。下面詳細講解這三個參數(shù)與四個步驟:

三個泛型參數(shù):
  • Params:被發(fā)送到執(zhí)行任務(wù)的參數(shù)類型。
  • Progress:進度的類型,發(fā)送后臺的計算進度到UI線程類型。
  • Result:異步任務(wù)的返回結(jié)果類型
一個異步任務(wù)將經(jīng)歷四個階段:
  • onPreExecute():執(zhí)行在UI線程上調(diào)用執(zhí)行任務(wù)之前,一般用于設(shè)置任務(wù)。
  • doInBackground(Params...):主要是用來執(zhí)行異步任務(wù)的耗時操作,可以在這個方法中通過publishProgress()方法發(fā)布進度信息,并在執(zhí)行完成之后,返回執(zhí)行結(jié)果。
  • onProgreddUpdate(Progress...):在UI線程上接受doInBackground()傳遞過來的進度信息,并在UI線程上展示進度信息,它執(zhí)行的時機是不確定的。
  • onPostExecute(Result):在UI線程上操作doInBackground()執(zhí)行的返回值。

上面介紹的四個步驟的示意圖:

Image.png
AsyncTask取消任務(wù)

在程序的任何位置,都可以通過cancel(boolean)方法進行取消任務(wù),當(dāng)取消任務(wù)之后,會改變isCancelled()的返回值, 使其返回true。之后會調(diào)用onCancelled(Object)方法,替代onPostExecute()得到doInBackground()的 返回結(jié)果。在運行中,可以經(jīng)常通過isCancelled()方法查看任務(wù)是否被取消。

AsyncTask的使用規(guī)則

使用AsyncTask必須遵循以下規(guī)則:

  • AsyncTask必須聲明在UI線程上。
  • AsyncTask必須在UI線程上實例化。
  • 必須通過execute()方法執(zhí)行任務(wù)。
  • 不可以直接調(diào)用onPreExecute()、onPostExecute(Resut)、doInBackground(Params...)、onProgressUpdate(Progress...)方法。
  • 可以設(shè)置任務(wù)只執(zhí)行一次,如果企圖再次執(zhí)行會報錯。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容