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

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

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

2019-11-11 07:00:39
字體:
來源:轉載
供稿:網友

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()兩個關鍵方法:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巍山| 蒙自县| 靖西县| 和平县| 广东省| 宁远县| 遂昌县| 新竹县| 团风县| 鄂托克旗| 彩票| 宿州市| 尖扎县| 宁夏| 太白县| 沅陵县| 霸州市| 乌鲁木齐市| 库伦旗| 焦作市| 伊宁市| 龙海市| 徐闻县| 鲁甸县| 宁河县| 湖州市| 萝北县| 仙游县| 彩票| 阆中市| 湄潭县| 青龙| 东乌珠穆沁旗| 禄丰县| 宝丰县| 扎鲁特旗| 普宁市| 保靖县| 永安市| 大名县| 凤冈县|