免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
android AsyncTask介紹

android AsyncTask介紹

AsyncTask和Handler對(duì)比

1 ) AsyncTask實(shí)現(xiàn)的原理,和適用的優(yōu)缺點(diǎn)

AsyncTask,是android提供的輕量級(jí)的異步類,可以直接繼承AsyncTask,在類中實(shí)現(xiàn)異步操作,提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過(guò)接口實(shí)現(xiàn)UI進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給UI主線程.

使用的優(yōu)點(diǎn):

l  簡(jiǎn)單,快捷

l  過(guò)程可控

       

使用的缺點(diǎn):

l  在使用多個(gè)異步操作和并需要進(jìn)行Ui變更時(shí),就變得復(fù)雜起來(lái).

2 )Handler異步實(shí)現(xiàn)的原理和適用的優(yōu)缺點(diǎn)

在Handler 異步實(shí)現(xiàn)時(shí),涉及到 Handler, Looper, Message,Thread四個(gè)對(duì)象,實(shí)現(xiàn)異步的流程是主線程啟動(dòng)Thread(子線程)àthread(子線程)運(yùn)行并生成Message-àLooper獲取Message并傳遞給HandleràHandler逐個(gè)獲取Looper中的Message,并進(jìn)行UI變更。

使用的優(yōu)點(diǎn):

l  結(jié)構(gòu)清晰,功能定義明確

l  對(duì)于多個(gè)后臺(tái)任務(wù)時(shí),簡(jiǎn)單,清晰

   

使用的缺點(diǎn):

l  在單個(gè)后臺(tái)異步處理時(shí),顯得代碼過(guò)多,結(jié)構(gòu)過(guò)于復(fù)雜(相對(duì)性)

 
AsyncTask介紹
Android的AsyncTask比Handler更輕量級(jí)一些,適用于簡(jiǎn)單的異步處理。
首先明確Android之所以有Handler和AsyncTask,都是為了不阻塞主線程(UI線程),且UI的更新只能在主線程中完成,因此異步處理是不可避免的。
 

Android為了降低這個(gè)開(kāi)發(fā)難度,提供了AsyncTask。AsyncTask就是一個(gè)封裝過(guò)的后臺(tái)任務(wù)類,顧名思義就是異步任務(wù)。

AsyncTask直接繼承于Object類,位置為android.os.AsyncTask。要使用AsyncTask工作我們要提供三個(gè)泛型參數(shù),并重載幾個(gè)方法(至少重載一個(gè))。

 

AsyncTask定義了三種泛型類型 Params,Progress和Result。

  • Params 啟動(dòng)任務(wù)執(zhí)行的輸入?yún)?shù),比如HTTP請(qǐng)求的URL。
  • Progress 后臺(tái)任務(wù)執(zhí)行的百分比。
  • Result 后臺(tái)執(zhí)行任務(wù)最終返回的結(jié)果,比如String。

使用過(guò)AsyncTask 的同學(xué)都知道一個(gè)異步加載數(shù)據(jù)最少要重寫以下這兩個(gè)方法:

  • doInBackground(Params…) 后臺(tái)執(zhí)行,比較耗時(shí)的操作都可以放在這里。注意這里不能直接操作UI。此方法在后臺(tái)線程執(zhí)行,完成任務(wù)的主要工作,通常需要較長(zhǎng)的時(shí)間。在執(zhí)行過(guò)程中可以調(diào)用publicProgress(Progress…)來(lái)更新任務(wù)的進(jìn)度。
  • onPostExecute(Result)  相當(dāng)于Handler 處理UI的方式,在這里面可以使用在doInBackground 得到的結(jié)果處理操作UI。 此方法在主線程執(zhí)行,任務(wù)執(zhí)行的結(jié)果作為此方法的參數(shù)返回

有必要的話你還得重寫以下這三個(gè)方法,但不是必須的:

  • onProgressUpdate(Progress…)   可以使用進(jìn)度條增加用戶體驗(yàn)度。 此方法在主線程執(zhí)行,用于顯示任務(wù)執(zhí)行的進(jìn)度。
  • onPreExecute()        這里是最終用戶調(diào)用Excute時(shí)的接口,當(dāng)任務(wù)執(zhí)行之前開(kāi)始調(diào)用此方法,可以在這里顯示進(jìn)度對(duì)話框。
  • onCancelled()             用戶調(diào)用取消時(shí),要做的操作

使用AsyncTask類,以下是幾條必須遵守的準(zhǔn)則:

  • Task的實(shí)例必須在UI thread中創(chuàng)建;
  • execute方法必須在UI thread中調(diào)用;
  • 不要手動(dòng)的調(diào)用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個(gè)方法;
  • 該task只能被執(zhí)行一次,否則多次調(diào)用時(shí)將會(huì)出現(xiàn)異常;

一個(gè)超簡(jiǎn)單的理解 AsyncTask 的例子:

Another paper :

(1)http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6143.html

http://developer.android.com/reference/android/os/AsyncTask.html

1. 一般需要編寫一個(gè)AsyncTask的子類來(lái)完成后臺(tái)執(zhí)行任務(wù)的工作。

2.  AsyncTask的核心方法是doInBackground,當(dāng)調(diào)用AsyncTask類的execute方法時(shí),doInBackground方法會(huì)異步執(zhí)行。因此,可以將執(zhí)行任務(wù)的代碼寫在doInBackground方法中。

3. 由于本例中的TextView組件是在主線程(UI線程)中創(chuàng)建的,因此,在其他的線程(doInBackground方法所在的線程)中不能直接更新TextVew組件。為了更新TextView組件,需要使用TextView類的post方法。該方法的參數(shù)是一個(gè)Runnable對(duì)象,需要將更新TextView組件的代碼寫在Runnable接口的run方法中。

4. 雖然不能在其他線程中更新UI組件,但可以從其他線程直接讀取UI組件的值。例如,在doInBackground方法中直接讀取了EditText組件的值。

5. 調(diào)用AsyncTask類的execute方法后會(huì)立即返回。execute方法的參數(shù)就是doInBackground方法的參數(shù)。doInBackground方法的返回值可以通過(guò)AsyncTask.execute(...).get()方法獲得。

讀者可以將本例中的IP改成其他的值,看看單擊按鈕后,是否還可在文本框中輸入其他的內(nèi)容。如果這個(gè)IP是正確的,并且WebService可訪問(wèn),那么會(huì)在TextView組件中輸出相應(yīng)的返回值。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
關(guān)于AsyncTask與Handler
Android中的Handler和AsyncTask的區(qū)別
深入了解Android中的AsyncTask
Android AsyncTask理解
Android AsyncTask運(yùn)作原理和源碼分析
Android之多線程工作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服