DAV首頁(yè)
數字音視工程網(wǎng)

微信公眾號

數字音視工程網(wǎng)

手機DAV

null
null
null
卓華,
null
null
null
null
null

我的位置:

share

分析Android消息處理系統原理

來(lái)源:中國數字音視工程網(wǎng)        編輯:windy    2011-11-25 15:07:35     加入收藏

 廣州銳目數碼科技有限公司是專(zhuān)業(yè)的嵌入式與流媒體系統解決方案開(kāi)發(fā)提供商。下面由銳目數碼android信息發(fā)布系統 為您介紹一下Android消息處理系統原理

  廣州銳目數碼科技有限公司是專(zhuān)業(yè)的嵌入式與流媒體系統解決方案開(kāi)發(fā)提供商。公司從事嵌入式開(kāi)發(fā)多年,有豐富的嵌入式Linux開(kāi)發(fā)經(jīng)驗,致力于基于Linux的流媒體系統解決方案的研發(fā),已經(jīng)研發(fā)出多套與媒體系統相關(guān)的產(chǎn)品。同時(shí),公司提供各種方案的機頂盒與網(wǎng)絡(luò )廣告機等產(chǎn)品。本公司擁有一支技術(shù)精湛,響應速度快,隨需應變的強大的研發(fā)隊伍,可以在公司現有技術(shù)的基礎上快速為客戶(hù)提供 OEM系統。下面由銳目數碼android信息發(fā)布系統 為您介紹一下Android消息處理系統原理

  Android系統中Looper負責管理線(xiàn)程的消息隊列和消息循環(huán),具體實(shí)現請參考Looper的源碼。 可以通過(guò)Loop.myLooper()得到當前線(xiàn)程的Looper對象,通過(guò)Loop.getMainLooper()可以獲得當前進(jìn)程的主線(xiàn)程的Looper對象。

  前面提到Android系統的消息隊列和消息循環(huán)都是針對具體線(xiàn)程的,一個(gè)線(xiàn)程可以存在(當然也可以不存在)一個(gè)消息隊列和一個(gè)消息循環(huán)(Looper),特定線(xiàn)程的消息只能分發(fā)給本線(xiàn)程,不能進(jìn)行跨線(xiàn)程,跨進(jìn)程通訊。但是創(chuàng )建的工作線(xiàn)程默認是沒(méi)有消息循環(huán)和消息隊列的,如果想讓該線(xiàn)程具有消息隊列和消息循環(huán),需要在線(xiàn)程中首先調用Looper.prepare()來(lái)創(chuàng )建消息隊列,然后調用Looper.loop()進(jìn)入消息循環(huán)。如下例所示:

  class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }

  這樣你的線(xiàn)程就具有了消息處理機制了,在Handler中進(jìn)行消息處理。

  Activity是一個(gè)UI線(xiàn)程,運行于主線(xiàn)程中,Android系統在啟動(dòng)的時(shí)候會(huì )為Activity創(chuàng )建一個(gè)消息隊列和消息循環(huán)(Looper)。詳細實(shí)現請參考ActivityThread.java文件。

  Handler的作用是把消息加入特定的(Looper)消息隊列中,并分發(fā)和處理該消息隊列中的消息。構造Handler的時(shí)候可以指定一個(gè)Looper對象,如果不指定則利用當前線(xiàn)程的Looper創(chuàng )建

  一個(gè)Activity中可以創(chuàng )建多個(gè)工作線(xiàn)程或者其他的組件,如果這些線(xiàn)程或者組件把他們的消息放入Activity的主線(xiàn)程消息隊列,那么該消息就會(huì )在主線(xiàn)程中處理了。因為主線(xiàn)程一般負責界面的更新操作,并且Android系統中的weget不是線(xiàn)程安全的,所以這種方式可以很好的實(shí)現Android界面更新。在A(yíng)ndroid系統中這種方式有著(zhù)廣泛的運用。

  那么另外一個(gè)線(xiàn)程怎樣把消息放入主線(xiàn)程的消息隊列呢?答案是通過(guò)Handle對象,只要Handler對象以主線(xiàn)程的Looper創(chuàng )建,那么調用Handler的sendMessage等接口,將會(huì )把消息放入隊列都將是放入主線(xiàn)程的消息隊列。并且將會(huì )在Handler主線(xiàn)程中調用該handler的handleMessage接口來(lái)處理消息

免責聲明:本文來(lái)源于中國數字音視工程網(wǎng),本文僅代表作者個(gè)人觀(guān)點(diǎn),本站不作任何保證和承諾,若有任何疑問(wèn),請與本文作者聯(lián)系或有侵權行為聯(lián)系本站刪除。
掃一掃關(guān)注數字音視工程網(wǎng)公眾號

相關(guān)閱讀related

評論comment

 
驗證碼:
您還能輸入500
    国产av福利久久精品can动漫|2021精品国产自在现线|亚洲无线观看国产高清|欧洲人妻丰满av无码久久不卡|欧美情侣性视频