安卓消息制詳解.doc

安卓消息制詳解.doc

ID:56873108

大?。?12.00 KB

頁數(shù):61頁

時(shí)間:2020-07-17

安卓消息制詳解.doc_第1頁
安卓消息制詳解.doc_第2頁
安卓消息制詳解.doc_第3頁
安卓消息制詳解.doc_第4頁
安卓消息制詳解.doc_第5頁
資源描述:

《安卓消息制詳解.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Android消息處理機(jī)制2011-10-2813:362951人閱讀評論(7)收藏舉報(bào)目錄(?)[+]1.Android的消息機(jī)制(一)2.Android消息處理機(jī)制(二)3.用Android線程間通信的Message機(jī)制4.Android中Handler的使用方法——在子線程中更新界面5.線程的魔法師Looper6.異步處理大師Handler7.封裝任務(wù)MessageGoogle參考了Windows的消息處理機(jī)制,在Android系統(tǒng)中實(shí)現(xiàn)了一套類似的消息處理機(jī)制。學(xué)習(xí)Android的消息處

2、理機(jī)制,有幾個(gè)概念(類)必須了解:1.??????Message消息,理解為線程間通訊的數(shù)據(jù)單元。例如后臺(tái)線程在處理數(shù)據(jù)完畢后需要更新UI,則可發(fā)送一條包含更新信息的Message給UI線程。2.??????MessageQueue消息隊(duì)列,用來存放通過Handler發(fā)布的消息,按照先進(jìn)先出執(zhí)行。3.??????HandlerHandler是Message的主要處理者,負(fù)責(zé)將Message添加到消息隊(duì)列以及對消息隊(duì)列中的Message進(jìn)行處理。4.??????Looper循環(huán)器,扮演Messag

3、eQueue和Handler之間橋梁的角色,循環(huán)取出MessageQueue里面的Message,并交付給相應(yīng)的Handler進(jìn)行處理。5.???線程UIthread通常就是mainthread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)MessageQueue。每一個(gè)線程里可含有一個(gè)Looper對象以及一個(gè)MessageQueue數(shù)據(jù)結(jié)構(gòu)。在你的應(yīng)用程序里,可以定義Handler的子類別來接收Looper所送出的消息。運(yùn)行機(jī)理:??????每個(gè)線程都可以并僅可以擁有一個(gè)Looper實(shí)例,消息隊(duì)列

4、MessageQueue在Looper的構(gòu)造函數(shù)中被創(chuàng)建并且作為成員變量被保存,也就是說MessageQueue相對于線程也是唯一的。Android應(yīng)用在啟動(dòng)的時(shí)候會(huì)默認(rèn)會(huì)為主線程創(chuàng)建一個(gè)Looper實(shí)例,并借助相關(guān)的Handler和Looper里面的MessageQueue完成對Activities、Services、BroadcaseReceivers等的管理。而在子線程中,Looper需要通過顯式調(diào)用Looper.Prepare()方法進(jìn)行創(chuàng)建。Prepare方法通過ThreadLocal

5、來保證Looper在線程內(nèi)的唯一性,如果Looper在線程內(nèi)已經(jīng)被創(chuàng)建并且嘗試再度創(chuàng)建"OnlyoneLoopermaybecreatedperthread"異常將被拋出。???????Handler在創(chuàng)建的時(shí)候可以指定Looper,這樣通過Handler的sendMessage()方法發(fā)送出去的消息就會(huì)添加到指定Looper里面的MessageQueue里面去。在不指定Looper的情況下,Handler綁定的是創(chuàng)建它的線程的Looper。如果這個(gè)線程的Looper不存在,程序?qū)伋?Can'

6、tcreatehandlerinsidethreadthathasnotcalledLooper.prepare()"。???????整個(gè)消息處理的大概流程是:1.包裝Message對象(指定Handler、回調(diào)函數(shù)和攜帶數(shù)據(jù)等);2.通過Handler的sendMessage()等類似方法將Message發(fā)送出去;3.在Handler的處理方法里面將Message添加到Handler綁定的Looper的MessageQueue;4.Looper的loop()方法通過循環(huán)不斷從MessageQu

7、eue里面提取Message進(jìn)行處理,并移除處理完畢的Message;5.通過調(diào)用Message綁定的Handler對象的dispatchMessage()方法完成對消息的處理。???????在dispatchMessage()方法里,如何處理Message則由用戶指定,三個(gè)判斷,優(yōu)先級從高到低:1.Message里面的Callback,一個(gè)實(shí)現(xiàn)了Runnable接口的對象,其中run函數(shù)做處理工作;2.Handler里面mCallback指向的一個(gè)實(shí)現(xiàn)了Callback接口的對象,由其hand

8、leMessage進(jìn)行處理;3.處理消息Handler對象對應(yīng)的類繼承并實(shí)現(xiàn)了其中handleMessage函數(shù),通過這個(gè)實(shí)現(xiàn)的handleMessage函數(shù)處理消息。???Android的消息機(jī)制(一)android有一種叫消息隊(duì)列的說法,這里我們可以這樣理解:假如一個(gè)隧道就是一個(gè)消息隊(duì)列,那么里面的每一部汽車就是一個(gè)一個(gè)消息,這里我們先忽略掉超車等種種因素,只那么先進(jìn)隧道的車將會(huì)先出,這個(gè)機(jī)制跟我們android的消息機(jī)制是一樣的。一、???角色描述1.Looper:(相當(dāng)于隧道)一個(gè)線程可

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。