麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Handler的通信機(jī)制的背后的原理是什么?

Handler的通信機(jī)制的背后的原理是什么?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-11 18:50:14 1697021414

一、Handler的通信機(jī)制的背后的原理

Handler的通信機(jī)制的背后的原理是,一個(gè)線程中可以定義多個(gè) Handler 實(shí)例,但是每個(gè) Handler 實(shí)際上引用的是同一個(gè) Looper。當(dāng)然,我們要在創(chuàng)建 Handler 之前先創(chuàng)建 Looper。而每個(gè) Looper 又只對(duì)應(yīng)一個(gè) MessageQueue。該 MessageQueue 會(huì)在創(chuàng)建 Looper 的時(shí)候被創(chuàng)建。在 MessageQueue 中使用 Message 對(duì)象來(lái)拼接一個(gè)單向的鏈表結(jié)構(gòu),依次來(lái)構(gòu)成一個(gè)消息隊(duì)列。每個(gè) Message 是鏈表的一個(gè)結(jié)點(diǎn),封裝了我們發(fā)送的信息。

Handler 發(fā)送消息的方法分成 post 和 send 兩種類型。post 的用來(lái)發(fā)送 Runnable 類型的數(shù)據(jù),send 類型的用來(lái)發(fā)送 Message 類型的數(shù)據(jù)。但不論哪種類型最終都會(huì)調(diào)用 Handler 的 sendMessageAtTime() 方法來(lái)加入到 MessageQueue 的隊(duì)列中。區(qū)別在于,post 類型的方法需要經(jīng)過(guò) Handler 的 getPostMessage() 包裝成 Message 之后再發(fā)送。

當(dāng)消息被添加到隊(duì)列之后需要執(zhí)行消息,這部分內(nèi)容在 Looper 的?loop()?方法中。當(dāng)我們調(diào)用 Looper 的 loop() 方法之后整個(gè) Looper 循環(huán)就開(kāi)始不斷地處理消息了。當(dāng)我們?cè)谘h(huán)中調(diào)用 MessageQueue 的 next() 方法來(lái)獲取下一個(gè)消息的時(shí)候,會(huì)調(diào)用 nativePollOnce() 方法,該方法可能會(huì)造成線程阻塞和非阻塞,當(dāng)線程為非阻塞的時(shí)候就會(huì)從 Native 層回到 Java 層,從 MessageQueuue 中取得一個(gè)消息之后給 Looper 進(jìn)行處理。如果獲取的時(shí)候造成線程阻塞,那么有兩種情況會(huì)喚醒阻塞的線程,一個(gè)是當(dāng)一個(gè)新的消息被加入到隊(duì)列中,并且將會(huì)早于之前隊(duì)列的所有消息被觸發(fā),那么此時(shí)將會(huì)重新設(shè)置超時(shí)時(shí)間。如果達(dá)到了超時(shí)時(shí)間同樣可以從睡眠狀態(tài)中返回,也就回到了 Java 層繼續(xù)處理。所以,Native 層的 Looper 的作用就是通過(guò)阻塞消息隊(duì)列獲取消息的過(guò)程阻塞 Looper。

延伸閱讀:

二、消息機(jī)制的模型有什么

Message:需要傳遞的消息,可以傳遞數(shù)據(jù);

MessageQueue:消息隊(duì)列,但是它的內(nèi)部實(shí)現(xiàn)并不是用的隊(duì)列,實(shí)際上是通過(guò)一個(gè)單鏈表的數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)消息列表,因?yàn)閱捂湵碓诓迦牒蛣h除上比較有優(yōu)勢(shì)。主要功能向消息池投遞消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);

Handler:消息輔助類,主要功能向消息池發(fā)送各種消息事件(Handler.sendMessage)和處理相應(yīng)消息事件(Handler.handleMessage);

Looper:不斷循環(huán)執(zhí)行(Looper.loop),從MessageQueue中讀取消息,按分發(fā)機(jī)制將消息分發(fā)給目標(biāo)處理者。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
為什么要用Lambda表達(dá)式?

一、用Lambda表達(dá)式的原因Lambda表達(dá)式是一種匿名函數(shù),它在許多編程語(yǔ)言中得到了廣泛應(yīng)用,包括Java、Python、JavaScript等。1、簡(jiǎn)潔性Lambda...詳情>>

2023-10-11 20:31:47
JavaScript能達(dá)到什么效果?

一、動(dòng)態(tài)內(nèi)容與交互JavaScript可以讓網(wǎng)頁(yè)具有動(dòng)態(tài)性和交互性,為用戶提供更豐富的使用體驗(yàn)。動(dòng)態(tài)內(nèi)容:通過(guò)JavaScript,開(kāi)發(fā)人員可以動(dòng)態(tài)地修改...詳情>>

2023-10-11 20:20:30
Python的主要應(yīng)用行業(yè)有哪些?

一、網(wǎng)絡(luò)和Web開(kāi)發(fā)Python在網(wǎng)絡(luò)和Web開(kāi)發(fā)領(lǐng)域有著廣泛的應(yīng)用。它提供了一系列的庫(kù)和框架,如Django和Flask,用于構(gòu)建高效且可擴(kuò)展的Web應(yīng)用程序...詳情>>

2023-10-11 20:18:37
Python語(yǔ)言是用來(lái)做什么?

Python是一種高級(jí)的、動(dòng)態(tài)類型的解釋性編程語(yǔ)言,以其簡(jiǎn)潔明了的語(yǔ)法和強(qiáng)大的功能而廣受贊譽(yù)。Python的應(yīng)用范圍非常廣泛,從Web開(kāi)發(fā)到數(shù)據(jù)分析...詳情>>

2023-10-11 20:16:52
什么是COM和如何使用COM?

一、COMCOM(Component Object Model)是最近WIndows世界中最流行的TLA(three-letter acronym)。一些新技術(shù)的出現(xiàn)都是基于COM的。并且這些技術(shù)文...詳情>>

2023-10-11 20:12:19
主站蜘蛛池模板: 娃娃脸1977年英国| 欧美一区二区三区久久久人妖| 色老太bbw| aaa一级黄色片| 东北女人奶大毛多水多| 波多野结衣无限| 草草影院最新发布地址| 日韩毛片电影| 伊人动漫| 国产精品视频不卡| 欧美a级影院| 一个人看的www日本高清视频| 亚洲一区天堂| 榴莲榴莲榴莲榴莲官网| 久久精品国产亚洲7777| 99久久精品免费看国产| 高贵的你韩剧免费观看国语版| 欧美成人免费在线观看| 老鸭窝在线播放| 小唐璜情史在线播放| 视频二区三区国产情侣在线| 久久久久久久久久国产精品免费| 中国老人倣爱视频| 国产粉嫩| 蜜桃成熟时仙子| 欧美成人精品第一区| 鲁一鲁射一射| 日本高清在线播放| 夜夜影院未满十八勿进| 欧美野性肉体狂欢大派对| 国产一卡二卡| 老阿姨哔哩哔哩b站肉片茄子芒果| 经典三级四虎在线观看| 大雄的性生活| 国产精欧美一区二区三区 | 国产精品亚洲综合一区在线观看| 国产99久久精品一区二区| 天天夜夜狠狠| 免费人成在线观看网站品爱网日本| 最近最新中文字幕| 老司机午夜在线视频免费|