Handler原理

Handler是android子線程和主線程之間通信的一種機制。

主要包含四個類handler? looper? messagequeue? message

handler作用昔园?

用來發(fā)送和處理消息的。

一個線程中多個handler發(fā)消息處理消息為什么不混亂犀变?:

message.target = handler(當(dāng)前發(fā)消息的handler)

Looper作用噩斟?:

通過loop(for死循環(huán))查看當(dāng)前的消息鏈表中是否有需要處理的message砖顷。

MessageQueue作用尉姨?

MessageQueue 存在的原因很簡單翩活,就是同一線程在同一時間只能處理一個消息,同一線程代碼執(zhí)行是不具有并發(fā)性芬迄,所以需要隊列來保存消息和安排每個消息的處理順序。多個其他線程往UI線程發(fā)送消息昂秃,UI線程必須把這些消息保持到一個列表(它同一時間不能處理那么多任務(wù)),然后挨個拿出來處理禀梳,這種設(shè)計很簡單,我們平時寫代碼其實也經(jīng)常這么做肠骆。每一個Looper線程都會維護這樣一個隊列算途,而且僅此一個,這個隊列的消息只能由該線程處理蚀腿。

用來存儲message的鏈表(鏈表中的消息message是按when(當(dāng)前系統(tǒng)的時間戳)從小到大的排列)嘴瓤。

Message作用?:

用來存儲消息內(nèi)容

如何把Handler,Looper,MessageQueue,Message串起來莉钙?

通過handler.sendMessage這個方法廓脆,把當(dāng)前的消息對象message傳入到handler中,通過handler中的messagequeue對象的引用磁玉,把Message放入到MessageQueue中停忿。

在message存放的時候,message對象的target屬性記錄了當(dāng)前的handler蚊伞。message通過消息的執(zhí)行時間when席赂,從小到大排列插入到消息鏈表中。

我們looper的loop方法中的for(死循環(huán))去查看當(dāng)前的MessageQueue鏈表中是否有需要執(zhí)行的Message时迫。通過Message的when(消息的執(zhí)行時間判斷)和當(dāng)前的系統(tǒng)時間戳做對比颅停,如果當(dāng)前的系統(tǒng)時間戳小于當(dāng)前messagequeue鏈表中的消息執(zhí)行時間,當(dāng)前的執(zhí)行進(jìn)入等待狀態(tài)掠拳。如果當(dāng)前的系統(tǒng)時間戳大于或等于當(dāng)前的MessageQueue鏈表中的消息執(zhí)行時間癞揉,我們就把當(dāng)前的message從消息鏈表中刪除,并且把該消息返回給Looper的loop方法中。

在loop方法中獲取到message以后判斷message所對應(yīng)的target是否存在烧董,如果存在就調(diào)用target.dispathMessage方法把當(dāng)前的message傳入毁靶,在dispathMessage方法中,我們將調(diào)用handleMessage這個方法逊移。把當(dāng)前取出的message傳出去预吆。這樣在我們handler中重寫的handleMessage就拿到了當(dāng)前處理的消息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胳泉,一起剝皮案震驚了整個濱河市拐叉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扇商,老刑警劉巖凤瘦,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異案铺,居然都是意外死亡蔬芥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門控汉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笔诵,“玉大人,你說我怎么就攤上這事姑子『跣觯” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵街佑,是天一觀的道長谢翎。 經(jīng)常有香客問我,道長沐旨,這世上最難降的妖魔是什么森逮? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮希俩,結(jié)果婚禮上吊宋,老公的妹妹穿的比我還像新娘。我一直安慰自己颜武,他們只是感情好璃搜,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳞上,像睡著了一般这吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篙议,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天唾糯,我揣著相機與錄音怠硼,去河邊找鬼。 笑死移怯,一個胖子當(dāng)著我的面吹牛香璃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟误,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼葡秒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嵌溢?” 一聲冷哼從身側(cè)響起眯牧,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赖草,沒想到半個月后学少,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秧骑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年版确,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乎折。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡阀坏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笆檀,到底是詐尸還是另有隱情,我是刑警寧澤盒至,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布酗洒,位于F島的核電站,受9級特大地震影響枷遂,放射性物質(zhì)發(fā)生泄漏樱衷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一酒唉、第九天 我趴在偏房一處隱蔽的房頂上張望矩桂。 院中可真熱鬧,春花似錦痪伦、人聲如沸侄榴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癞蚕。三九已至,卻和暖如春辉哥,著一層夾襖步出監(jiān)牢的瞬間桦山,已是汗流浹背攒射。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恒水,地道東北人会放。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像钉凌,于是被迫代替她去往敵國和親咧最。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1.handler基本信息: 定義:一套 Android 消息傳遞機制甩骏。 作用:在多線程的應(yīng)用場景中窗市,將工作線程中...
    夢源坦閱讀 553評論 0 0
  • Handler是android子線程和主線程之間通信的一種機制。主要包含四個類handler looper m...
    殘非閱讀 188評論 0 0
  • Handler 原理 一饮笛、Handler消息發(fā)送機制 1. 發(fā)送消息 1.1 添加消息 調(diào)用Handler.sen...
    還是昵稱啊閱讀 201評論 0 0
  • 我的簡書:http://www.reibang.com/u/c91e642c4d90我的CSDN:http://...
    在代碼下成長閱讀 723評論 2 0
  • 在Android中咨察,只有主線程才能更新UI,但是主線程不能進(jìn)行耗時操作福青,否則會產(chǎn)生ANR異常摄狱,所以常常把耗時操作放...
    雷濤賽文閱讀 903評論 1 2