Handler原理

Handler的主要作用是為了實(shí)現(xiàn)線程間通信

Handler的整個(gè)流程中,包含了四個(gè)對(duì)象:Handler魄眉、message笛粘、messageQueue、looper
當(dāng)應(yīng)用創(chuàng)建的時(shí)候郑兴,就會(huì)在主線程中創(chuàng)建handler對(duì)象

我們把要發(fā)送的信息保存到message中,handler通過sendMessage方法將message發(fā)送到messageQueue中贝乎,looper對(duì)象不斷的調(diào)用loop()方法不斷的從messageQueue中取出message情连,交由handler處理。從而實(shí)現(xiàn)線程間通信览效。

主線程looper.loop()為什么不阻塞主線程却舀?

造成ANR的原因一般有兩種:
1. 當(dāng)前的事件沒有機(jī)會(huì)得到處理(即主線程正在處理前一個(gè)事件,沒有及時(shí)的完成或者looper被某種原因阻塞住了)
2.當(dāng)前的事件正在處理锤灿,但沒有及時(shí)完成

應(yīng)用啟動(dòng)時(shí)挽拔,在ActivityThread的main方法中就創(chuàng)建了一個(gè)當(dāng)前主線程的looper(我們不需要手動(dòng)開啟looper),并開啟了消息隊(duì)列但校,消息隊(duì)列是一個(gè)無限循環(huán)螃诅,應(yīng)用的整個(gè)生命周期就是運(yùn)行在這個(gè)消息循環(huán)中的,安卓是由事件驅(qū)動(dòng)的,Looper.loop不斷的接收處理事件术裸,looper.loop一旦結(jié)束倘是,應(yīng)用程序的生命周期也就結(jié)束了,所以只能說事件的處理如果阻塞的話會(huì)導(dǎo)致ANR袭艺,而不能說looper的無限循環(huán)會(huì)導(dǎo)致ANR搀崭。

loop會(huì)不會(huì)對(duì)CPU性能有過多的消耗

在子線程創(chuàng)建Handler,此時(shí)由于這個(gè)線程中沒有默認(rèn)開啟的消息隊(duì)列,所以我們需要手動(dòng)調(diào)用looper.prepare(),并通過looper.loop開啟消息匹表。主線程Looper從消息隊(duì)列讀取消息门坷,當(dāng)讀完所有消息時(shí),主線程阻塞袍镀。子線程往消息隊(duì)列發(fā)送消息默蚌,并且往管道文件寫數(shù)據(jù),主線程即被喚醒苇羡,從管道文件讀取數(shù)據(jù)绸吸,主線程被喚醒只是為了讀取消息,當(dāng)消息讀取完畢设江,再次睡眠锦茁。因此loop的循環(huán)并不會(huì)對(duì)CPU性能有過多的消耗。

參考文章
http://www.reibang.com/p/d5ae223e941b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叉存,一起剝皮案震驚了整個(gè)濱河市码俩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歼捏,老刑警劉巖稿存,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瞳秽,居然都是意外死亡瓣履,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門练俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袖迎,“玉大人,你說我怎么就攤上這事腺晾⊙嘧叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵悯蝉,是天一觀的道長归形。 經(jīng)常有香客問我,道長泉粉,這世上最難降的妖魔是什么连霉? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮嗡靡,結(jié)果婚禮上跺撼,老公的妹妹穿的比我還像新娘。我一直安慰自己讨彼,他們只是感情好歉井,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哈误,像睡著了一般哩至。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜜自,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天菩貌,我揣著相機(jī)與錄音,去河邊找鬼重荠。 笑死箭阶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戈鲁。 我是一名探鬼主播仇参,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婆殿!你這毒婦竟也來了诈乒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤婆芦,失蹤者是張志新(化名)和其女友劉穎怕磨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寞缝,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡癌压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荆陆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滩届。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖被啼,靈堂內(nèi)的尸體忽然破棺而出帜消,到底是詐尸還是另有隱情,我是刑警寧澤浓体,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布泡挺,位于F島的核電站,受9級(jí)特大地震影響命浴,放射性物質(zhì)發(fā)生泄漏娄猫。R本人自食惡果不足惜贱除,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媳溺。 院中可真熱鬧月幌,春花似錦、人聲如沸悬蔽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝎困。三九已至录语,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禾乘,已是汗流浹背澎埠。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留始藕,地道東北人失暂。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鳄虱,于是被迫代替她去往敵國和親弟塞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 為了更好的理解 Looper 的工作原理拙已,我們需要對(duì) ThreadLocal 進(jìn)行了解决记,如果對(duì) ThreadLoc...
    墨染書閱讀 1,475評(píng)論 0 3
  • 前言 有關(guān)handler的使用網(wǎng)上的教程有很多,并不是很難倍踪,在我的前幾篇文章中也有簡單的介紹過handler使用的...
    蠟筆小州閱讀 633評(píng)論 1 3
  • 要分析Handler的原理系宫,首先需要了解Message和Looper,所以我們先來分析一下Message和Loop...
    王小二的王閱讀 479評(píng)論 0 0
  • 異步消息處理線程啟動(dòng)后會(huì)進(jìn)入一個(gè)無限的循環(huán)體之中建车,每循環(huán)一次扩借,從其內(nèi)部的消息隊(duì)列中取出一個(gè)消息,然后回調(diào)相應(yīng)的消息...
    cxm11閱讀 6,424評(píng)論 2 39
  • 這是我第二次讀圍城缤至。 第一次讀它是在學(xué)業(yè)繁忙的高三潮罪,當(dāng)時(shí)我尚在理科培優(yōu)班。現(xiàn)在回過頭來想想领斥,在那個(gè)兵荒馬亂的三年里...
    易只烊微光閱讀 1,397評(píng)論 7 8