優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制

優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制

ID:22579742

大?。?45.04 KB

頁數(shù):14頁

時(shí)間:2018-10-30

優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制_第1頁
優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制_第2頁
優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制_第3頁
優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制_第4頁
優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制_第5頁
資源描述:

《優(yōu)就業(yè)android教程-深入理解android異步消息處理機(jī)制》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、優(yōu)就業(yè)Android教程-深入理解Android異步消息處理機(jī)制-、概述Android中的異步消息處理主要分為!U個(gè)咅P分組成,Message、Hndler、MessageQueue和Looper。其關(guān)系如下所示:MessageQueuenextnextMessageMessageMessagexte1.Message是線程之間傳遞的消息,它可以在內(nèi)部攜帶少量信息,用于在不同線程之間交換數(shù)據(jù)2.MessageQueue是消息隊(duì)列,它主要用于存放所有由Handler發(fā)送過來的消息,這部分消息會(huì)一直在消息隊(duì)列中,等待被處理。每個(gè)線程中只會(huì)有一個(gè)Messag

2、eQueue對(duì)象。2.Handler是處理者,它主要用于發(fā)送和處理消息。發(fā)送消息一般使用handler的sendMessage()方法,處理消息會(huì)調(diào)用handleMessage()方法。3.Looper是每個(gè)線程中MessageQueue的管家,調(diào)用loop()方法后,就會(huì)進(jìn)入到一個(gè)無限循環(huán)當(dāng)中,然后每當(dāng)發(fā)現(xiàn)MessageQueue中存在一條消息,就會(huì)將其取出,并傳遞到handleMessage()方法當(dāng)中。每個(gè)線程中也只會(huì)有一個(gè)Looper對(duì)象。二、詳細(xì)介紹1、Looper對(duì)于Looper主要是prepare()和loop()兩個(gè)方法。publics

3、taticfinalvoidprepareO{if(sThreadLocal.getO!=null){thrownewRuntimeException("OnlyoneLoopermaybecreatedperthread");sThreadLocal.set(newLooper(true));}sThreadLocal是一個(gè)ThreadLocal對(duì)象,可以在一個(gè)線程中存儲(chǔ)變量。Looper就是存儲(chǔ)在sThreadLocal里面。這個(gè)方法被調(diào)用后,首先會(huì)判斷當(dāng)前線程里面有沒有Looper對(duì)象,如果沒有就會(huì)創(chuàng)建一個(gè)Looper對(duì)象,如果存在則會(huì)拋出異常。

4、可見,prepare()方法,不能被調(diào)用兩次。這就保證了一個(gè)線程只有一個(gè)Looper對(duì)象。接下來我們看一下Looper的構(gòu)造函數(shù):privateLooper(booleanquitAllowed){mQueue=newMessageQueue(quitAllowed);mRun=true;mThread=Thread.currentThread();在Looper的構(gòu)造函數(shù)中,創(chuàng)建了MessageQueue對(duì)象,這也保證了一個(gè)線程只有一個(gè)MessageQueue對(duì)象。然后我們看看loop()方法:publicstaticvoidloop(){final

5、Looperme=myLooper();if(me==null){thrownewRuntimeException(”NoLooper;Looper.prepare()wasn'tcalledonthisthread.");}finalMessageQueuequeue=me.mQueue;//Makesuretheidentityofthisthreadisthatofthelocalprocess,//andkeeptrackofwhatthatidentitytokenactuallyis.Binder.clearCallingldentityO

6、;finallongident=Binder.clearCallingldentityO;for(;;){Messagemsg=queue.next();//mightblockif(msg==null){//Nomessageindicatesthatthemessagequeueisquitting.return;}//Thismustbeinalocalvariable,incaseaUIeventsetstheIoggerPrinterlogging=me.mLogging;if(logging!=null){logging.println("

7、>>>>>Dispatchingto"+msg.target+""+msg.callback+":"+msg.what);msg.target.dispatchMessage(msg);if(logging!=null){logging.println("<<<<

8、.clearCallingldentityO;if(ident!=newldent){Log.

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(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)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。