国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

菜鳥從源碼分析Handler消息機(jī)制

2019-11-11 07:05:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.Handler簡(jiǎn)介

Android中規(guī)定只允許在UI主線程當(dāng)中來(lái)操作UI,在子線程中不允許更新UI,而當(dāng)我們需要在子線程中進(jìn)行一些耗時(shí)操作完成后需要更新界面UI,此時(shí)我們?cè)撛趺崔k,這個(gè)時(shí)候我們就可以用到Handler,所以可以說(shuō)Handler的作用是為了通知主線程更新ui,但這只是Handler的一個(gè)作用,只是我們開發(fā)時(shí)常常用Handler來(lái)更新UI而已。在這里很多人會(huì)疑問(wèn)為什么規(guī)定要只能在主線程更新UI,因?yàn)槎鄠€(gè)子線程來(lái)同時(shí)操作UI的話,則容易造成很多不可知的現(xiàn)象,即線程是不安全的,很多人也會(huì)疑問(wèn)為啥不用鎖機(jī)制呢,鎖機(jī)制的話有兩個(gè)缺點(diǎn):a、鎖機(jī)制讓UI更新邏輯變得更復(fù)雜 b、鎖機(jī)制會(huì)阻礙一些線程,使更新效率大大降低。

2.Handler消息機(jī)制中關(guān)聯(lián)到的一些類:Looper,MessageQueue,ThreadLocal,Message等

3.Handler源碼分析

首先看構(gòu)造函數(shù)

上面的源碼清晰的說(shuō)明:首先會(huì)獲取當(dāng)前線程的Looper對(duì)象,為null則直接報(bào)錯(cuò),因此在子線程中我們必須自己調(diào)用Looper.PRepare()來(lái)創(chuàng)建Looper對(duì)象,其次獲取到Looper對(duì)象后則獲取looper當(dāng)中的MessageQueue對(duì)象,這兩個(gè)對(duì)象獲取到后對(duì)消費(fèi)的分發(fā)處理則有了保障。這兩個(gè)類后面會(huì)詳細(xì)描述。

接著看我們常用的handmessage方法和sendMessage方法,我們主要說(shuō)這兩個(gè)方法。

這個(gè)handmessage方法我們要實(shí)現(xiàn)的,其實(shí)實(shí)際上是dispatchMessage方法中處理消息,這個(gè)很簡(jiǎn)單,大家應(yīng)該都看得懂。接下來(lái)sendMessage方法:

這個(gè)方法也很簡(jiǎn)單,相信大家都看得懂,簡(jiǎn)單就是調(diào)用MessageQueue的enqueueMessage方法把消息存進(jìn)MessageQueue中。也就是Handler其實(shí)是一個(gè)領(lǐng)導(dǎo)者,它通過(guò)協(xié)調(diào)Looper和MessageQueue等進(jìn)行協(xié)同作業(yè)。

4.Looper源碼分析

Looper輪詢器的意思,就是無(wú)限輪詢MessageQueue中的消息,有就發(fā)出來(lái)讓handler處理,沒(méi)有就等待中。

同樣看prepare()方法和loop()兩個(gè)關(guān)鍵方法:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 犍为县| 渭南市| 莲花县| 抚顺市| 梁山县| 霞浦县| 铜梁县| 汉沽区| 漳平市| 永丰县| 南通市| 金华市| 苏尼特左旗| 德惠市| 尖扎县| 德钦县| 吉安市| 庆阳市| 沾化县| 桃源县| 保德县| 洪雅县| 河北区| 南京市| 衡南县| 讷河市| 深圳市| 德庆县| 滨州市| 安达市| 辽源市| 陕西省| 广州市| 玉树县| 宜都市| 屏东市| 浙江省| 天津市| 文成县| 邮箱| 永登县|