andriod提供了Handler 和 Looper 來滿足線程間的通信。Handler先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對(duì)象之間的消息交換(MessageExchange)。
1)Looper: 一個(gè)線程可以產(chǎn)生一個(gè)Looper對(duì)象,由它來管理此線程里的MessageQueue(消息隊(duì)列)。
2)Handler: 你可以構(gòu)造Handler對(duì)象來與Looper溝通,以便push新消息到MessageQueue里;或者接收Looper從 Message Queue取出)所送來的消息。
3) Message Queue(消息隊(duì)列):用來存放線程放入的消息。
4)線程:UIthread 通常就是main thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)MessageQueue。
2.Handler發(fā)送消息
UI主線程初始化第一個(gè)Handler時(shí)會(huì)通過ThreadLocal創(chuàng)建一個(gè)Looper,該Looper與UI主線程一一對(duì)應(yīng)。使用ThreadLocal的目的是保證每一個(gè)線程只創(chuàng)建唯一一個(gè)Looper。之后其他Handler初始化的時(shí)候直接獲取第一個(gè)Handler創(chuàng)建的Looper。Looper初始化的時(shí)候會(huì)創(chuàng)建一個(gè)消息隊(duì)列MessageQueue。至此,主線程、消息循環(huán)、消息隊(duì)列之間的關(guān)系是1:1:1。
Handler、Looper、MessageQueue的初始化流程如圖所示:
3.Handler處理消息
UI主線程通過Looper循環(huán)查詢消息隊(duì)列UI_MQ,當(dāng)發(fā)現(xiàn)有消息存在時(shí)會(huì)將消息從消息隊(duì)列中取出。首先分析消息,通過消息的參數(shù)判斷該消息對(duì)應(yīng)的Handler,然后將消息分發(fā)到指定的Handler進(jìn)行處理。
子線程通過Handler、Looper與UI主線程通信的流程如圖所示。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:handler的機(jī)制詳解-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://jinyejixie.com/article38/dhddsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、建站公司、用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)