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

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

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

2019-11-11 06:23:39
字體:
供稿:網(wǎng)友

1.Handler簡介

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

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

3.Handler源碼分析

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

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

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

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

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

4.Looper源碼分析

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

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 太谷县| 建瓯市| 衡水市| 林周县| 天等县| 会同县| 开平市| 桓仁| 沂水县| 湄潭县| 北票市| 古蔺县| 都江堰市| 东乌珠穆沁旗| 抚顺市| 富蕴县| 蒙阴县| 即墨市| 方山县| 漠河县| 搜索| 米脂县| 泰兴市| 江城| 阿巴嘎旗| 渝北区| 牙克石市| 九江县| 金昌市| 应用必备| 六枝特区| 车险| 玛多县| 江口县| 福州市| 龙海市| 麻江县| 武宁县| 钟祥市| 石首市| 黄陵县|