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

首頁 > 學院 > 開發設計 > 正文

菜鳥從源碼分析Handler消息機制

2019-11-11 07:32:46
字體:
來源:轉載
供稿:網友

1.Handler簡介

Android中規定只允許在UI主線程當中來操作UI,在子線程中不允許更新UI,而當我們需要在子線程中進行一些耗時操作完成后需要更新界面UI,此時我們該怎么辦,這個時候我們就可以用到Handler,所以可以說Handler的作用是為了通知主線程更新ui,但這只是Handler的一個作用,只是我們開發時常常用Handler來更新UI而已。在這里很多人會疑問為什么規定要只能在主線程更新UI,因為多個子線程來同時操作UI的話,則容易造成很多不可知的現象,即線程是不安全的,很多人也會疑問為啥不用鎖機制呢,鎖機制的話有兩個缺點:a、鎖機制讓UI更新邏輯變得更復雜 b、鎖機制會阻礙一些線程,使更新效率大大降低。

2.Handler消息機制中關聯到的一些類:Looper,MessageQueue,ThreadLocal,Message等

3.Handler源碼分析

首先看構造函數

上面的源碼清晰的說明:首先會獲取當前線程的Looper對象,為null則直接報錯,因此在子線程中我們必須自己調用Looper.PRepare()來創建Looper對象,其次獲取到Looper對象后則獲取looper當中的MessageQueue對象,這兩個對象獲取到后對消費的分發處理則有了保障。這兩個類后面會詳細描述。

接著看我們常用的handmessage方法和sendMessage方法,我們主要說這兩個方法。

這個handmessage方法我們要實現的,其實實際上是dispatchMessage方法中處理消息,這個很簡單,大家應該都看得懂。接下來sendMessage方法:

這個方法也很簡單,相信大家都看得懂,簡單就是調用MessageQueue的enqueueMessage方法把消息存進MessageQueue中。也就是Handler其實是一個領導者,它通過協調Looper和MessageQueue等進行協同作業。

4.Looper源碼分析

Looper輪詢器的意思,就是無限輪詢MessageQueue中的消息,有就發出來讓handler處理,沒有就等待中。

同樣看prepare()方法和loop()兩個關鍵方法:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云霄县| 兴化市| 临漳县| 西林县| 桐城市| 新津县| 青神县| 兖州市| 许昌县| 广德县| 奈曼旗| 甘孜县| 定远县| 湖口县| 阜南县| 北辰区| 尼玛县| 宁明县| 德钦县| 钟山县| 故城县| 松潘县| 南昌市| 阿拉善盟| 白朗县| 建昌县| 云龙县| 东乌珠穆沁旗| 浙江省| 慈利县| 三亚市| 滕州市| 治县。| 安化县| 常州市| 吴堡县| 临沧市| 巨鹿县| 仙游县| 菏泽市| 收藏|