Android 消息機(jī)制深入源碼分析 [ 一 ]

Android 消息機(jī)制深入源碼分析 [ 一 ]
Android 消息機(jī)制之 ThreadLocal 深入源碼分析 [ 二 ]
Android 消息機(jī)制之 Looper 深入源碼分析 [ 三 ]
Android 消息機(jī)制之 Message 與消息對象池的深入源碼分析 [ 四 ]
Android 消息機(jī)制之 MessageQueue 深入源碼分析 [ 五 ]
Android 消息機(jī)制之初識Handler [ 六 ]
Android 消息機(jī)制之 Handler 發(fā)送消息的深入源碼分析 [ 七 ]
Android 消息機(jī)制之 MessageQueue.next() 消息取出的深入源碼分析 [ 八 ]
Android 消息機(jī)制之消息的其他處理深入源碼分析 [ 九 ]
Android 消息機(jī)制總結(jié) [ 十 ]

本文集, 開始學(xué)習(xí) Android 的消息機(jī)制. 將全面的了解消息機(jī)制中各個(gè)組件的作用及原理.

?
在開始分析源碼之前, 需要先了解一下 Android 中消息機(jī)制的基本概念.
?

消息機(jī)制概述

  • Android 的消息機(jī)制主要是指 Handler 的運(yùn)行機(jī)制, Handler 的運(yùn)行需要底層的 MessageQueue 和 Looper 的支撐.

  • Handler 是 Android 消息機(jī)制的上層接口, 這使得在開發(fā)過程中只需要和 Handler 交互即可, Handler 的主要作用是將一個(gè)任務(wù)切換到某個(gè)指定的線程中去執(zhí)行. 因?yàn)?Android 規(guī)定訪問 UI 只能在主線程中進(jìn)行.

  • MessageQueue 的中文翻譯是消息隊(duì)列, 顧名思義, 它的內(nèi)部存儲(chǔ)了一組消息, 以隊(duì)列的形式對外提供插入和刪除的工作. 雖然叫消息隊(duì)列, 但是它的內(nèi)部存儲(chǔ)結(jié)果卻不是真正的隊(duì)列, 而是采用單鏈表的結(jié)構(gòu)來存儲(chǔ)消息列表.

  • Looper 的中文翻譯為循環(huán). 可以理解為消息循環(huán). 由于 MessageQueue 只是一個(gè)消息的存儲(chǔ)單元, 它不能去處理消息, 而 Looper 就填補(bǔ)了這個(gè)功能. Looper 會(huì)以無限循環(huán)的形式去查找是否有新的消息, 有就處理, 否則就會(huì)一直等待.

  • ThreadLocal: Looper 中還有一個(gè)特殊的概念,那就是 ThreadLocal, ThreadLocal 并不是線程, 它的作用是可以在每個(gè)線程中存儲(chǔ)數(shù)據(jù), Handler 創(chuàng)建的時(shí)候會(huì)采用當(dāng)前線程的 Looper 來構(gòu)造消息循環(huán)系統(tǒng), Handler 內(nèi)部就是通過 ThreadLocal 來獲取當(dāng)前線程的 Looper 的. ThreadLocal 可以再不同的線程中互不干擾的存儲(chǔ)并提供數(shù)據(jù). 通過 ThreadLocal 可以輕松獲取每個(gè)線程的 Looper, 需要注意的是, 線程默認(rèn)是沒有 Looper 的, 如果需要使用 Handler 就必須為線程創(chuàng)建 Looper.(主線程除外). 我們經(jīng)常提到的主線程, 也叫 UI 線程, 它就是 ActivityThread, ActivityThread 被創(chuàng)建時(shí)就會(huì)初始化 Looper, 這也是我們在主線程中默認(rèn)可以使用 Handler 的原因.

  • Handler 與 Message 內(nèi)部其實(shí)是相互持有引用的.

?
?

原創(chuàng)地址已經(jīng)找不到了 (因?yàn)槲沂窍热繉懙?Typora, 一點(diǎn)一點(diǎn)看完后, 才來發(fā)布到簡書), 原作者看到可聯(lián)系我, 我將注明來源. 謝謝!
下一章, 將正式進(jìn)入 Android 消息機(jī)制深入源碼分析.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末布持,一起剝皮案震驚了整個(gè)濱河市补疑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖况芒,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牍白,居然都是意外死亡首有,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門俏橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允华,“玉大人,你說我怎么就攤上這事寥掐⊙ゼ牛” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵召耘,是天一觀的道長百炬。 經(jīng)常有香客問我,道長污它,這世上最難降的妖魔是什么剖踊? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任庶弃,我火速辦了婚禮,結(jié)果婚禮上德澈,老公的妹妹穿的比我還像新娘歇攻。我一直安慰自己,他們只是感情好梆造,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布缴守。 她就那樣靜靜地躺著,像睡著了一般镇辉。 火紅的嫁衣襯著肌膚如雪屡穗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天忽肛,我揣著相機(jī)與錄音村砂,去河邊找鬼。 笑死麻裁,一個(gè)胖子當(dāng)著我的面吹牛箍镜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煎源,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼色迂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了手销?” 一聲冷哼從身側(cè)響起歇僧,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锋拖,沒想到半個(gè)月后诈悍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽埃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年侥钳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄错。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舷夺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出售貌,到底是詐尸還是另有隱情给猾,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布颂跨,位于F島的核電站敢伸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恒削。R本人自食惡果不足惜池颈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一尾序、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饶辙,春花似錦蹲诀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽则北。三九已至矿微,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尚揣,已是汗流浹背涌矢。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快骗,地道東北人娜庇。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像方篮,于是被迫代替她去往敵國和親名秀。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351