課程咨詢(xún): 400-996-5531 / 投訴建議: 400-111-8989

認(rèn)識(shí)達(dá)內(nèi)從這里開(kāi)始

認(rèn)真做教育 專(zhuān)心促就業(yè)

AsyncTask解決Android UI堵塞問(wèn)題

平時(shí)我們?cè)陂_(kāi)發(fā)Android程序時(shí)遇到較耗時(shí)任務(wù)的處理,如I/O訪問(wèn)的數(shù)據(jù)庫(kù)操作、網(wǎng)絡(luò)訪問(wèn)等情況時(shí)造成UI假死等問(wèn)題,通過(guò) AsyncTask可以很好的解決這個(gè)問(wèn)題,就今天以在Android中執(zhí)行Downloader.downloadFile(url),可能會(huì)堵塞整個(gè) 界面。顯然這會(huì)影響用戶(hù)體驗(yàn),我們?nèi)绾谓鉀Q這個(gè)問(wèn)題呢?

方法一、

創(chuàng)建一個(gè)新的線(xiàn)程執(zhí)行我們的任務(wù),使用Thread類(lèi),在 run(){}中寫(xiě)入任務(wù)代碼,比如:

new Thread(new Runnable() {

public void run() {

Downloader.downloadFile(url);

}

}).start();

但使用Thread會(huì)產(chǎn)生一些意想不到的問(wèn)題,需要程序員用更多的代碼手動(dòng)的維護(hù)它。

方法二: Android SDK為我們提供了一個(gè)后臺(tái)任務(wù)的處理工具AsyncTask。AsyncTask就是一個(gè)封裝過(guò)的后臺(tái)任務(wù)類(lèi)顧名思義就是異步任務(wù),方便我們維 護(hù),Android開(kāi)發(fā)網(wǎng)提示這樣的好處可以解決一些線(xiàn)程安全問(wèn)題,AsyncTask直接繼承于Object類(lèi),位置為 android.os.AsyncTask。要使用AsyncTask工作我們要提供三個(gè)泛型參數(shù),并重載四個(gè)方法(至少重載一個(gè))。

三個(gè)泛型:

Param ,任務(wù)執(zhí)行器需要的數(shù)據(jù)類(lèi)型

Progress 后臺(tái)計(jì)算中使用的進(jìn)度單位數(shù)據(jù)類(lèi)型

Result 后臺(tái)計(jì)算返回結(jié)果的數(shù)據(jù)類(lèi)型

有些參數(shù)是可以設(shè)置為不使用的,只要傳遞為Void型即可,比如AsyncTask

四個(gè)步驟:

onPreExecute(),執(zhí)行預(yù)處理,它運(yùn)行于UI線(xiàn)程,可以為后臺(tái)任務(wù)做一些準(zhǔn)備工作,比如繪制一個(gè)進(jìn)度條控件。

doInBackground(Params...), 后臺(tái)進(jìn)程執(zhí)行的具體計(jì)算在這里實(shí)現(xiàn),doInBackground(Params...)是AsyncTask的關(guān)鍵,此方法必須重載。在這個(gè)方法內(nèi)可以 使用publishProgress(Progress...)改變當(dāng)前的進(jìn)度值。

onProgressUpdate(Progress...), 運(yùn)行于UI線(xiàn)程。如果在doInBackground(Params...)中使用了publishProgress(Progress...),就會(huì)觸 發(fā)這個(gè)方法。在這里可以對(duì)進(jìn)度條控件根據(jù)進(jìn)度值做出具體的響應(yīng)。

onPostExecute(Result),運(yùn)行于UI線(xiàn)程,可以對(duì)后臺(tái)任務(wù)的 結(jié)果做出處理,結(jié)果就是doInBackground(Params...)的返回值。此方法也要經(jīng)常重載,如果Result為null表明后臺(tái)任務(wù)沒(méi)有 完成(被取消或者出現(xiàn)異常)。

【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!

相關(guān)推薦
最新資訊
免費(fèi)試聽(tīng)課程
  • 全部課程
  • IT課程
  • 設(shè)計(jì)課程
  • 運(yùn)營(yíng)課程
Free courses
最新開(kāi)班時(shí)間
  • 北京
  • 上海
  • 廣州
  • 深圳
  • 南京
  • 成都
  • 武漢
  • 西安
  • 青島
  • 天津
  • 杭州
  • 重慶
  • 哈爾濱
  • 濟(jì)南
  • 沈陽(yáng)
  • 合肥
  • 鄭州
  • 長(zhǎng)春
  • 蘇州
  • 長(zhǎng)沙
  • 昆明
  • 太原
  • 無(wú)錫
  • 石家莊
  • 南寧
  • 佛山
  • 珠海
  • 寧波
  • 保定
  • 呼和浩特
  • 洛陽(yáng)
  • 煙臺(tái)
  • 運(yùn)城
  • 濰坊
  • 開(kāi)課名稱(chēng)
  • 開(kāi)班時(shí)間
  • 搶座
  • 咨詢(xún)
  • 開(kāi)課名稱(chēng)
  • 開(kāi)班時(shí)間
  • 搶座
  • 咨詢(xún)
預(yù)約申請(qǐng)?jiān)嚶?tīng)課
收起