国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

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

            千鋒教育

            掃一掃進入千鋒手機站

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

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

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

            Handler的通信機制的背后的原理是什么?

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

            一、Handler的通信機制的背后的原理

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

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

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

            延伸閱讀:

            二、消息機制的模型有什么

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

            MessageQueue:消息隊列,但是它的內(nèi)部實現(xiàn)并不是用的隊列,實際上是通過一個單鏈表的數(shù)據(jù)結(jié)構(gòu)來維護消息列表,因為單鏈表在插入和刪除上比較有優(yōu)勢。主要功能向消息池投遞消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);

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

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

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
            免費領(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