4. 如果找到了能夠處理事件的 View,那么該 View 會(huì)調(diào)用自己的 onTouchEvent 或 onKeyEvent 方法來處理事件。
5. 如果事件沒有被消費(fèi),那么事件會(huì)依次傳遞給父 View,直到到達(dá)根視圖或者事件被消費(fèi)為止。
2. 事件分發(fā)的優(yōu)先級(jí)
在事件分發(fā)過程中,系統(tǒng)會(huì)根據(jù)事件的類型和 View 的層級(jí)關(guān)系來確定事件的優(yōu)先級(jí)。一般來說,觸摸事件的優(yōu)先級(jí)高于按鍵事件,而在同一個(gè)層級(jí)中,后面添加的 View 會(huì)優(yōu)先處理事件。
在代碼中,事件的優(yōu)先級(jí)是通蘋果分發(fā)代碼過一個(gè)叫做 mFirstTouchTarget 的鏈表來維護(hù)的。這個(gè)鏈表中存儲(chǔ)著所有可以處理觸摸事件的 View,鏈表的頭部是最先添加的 View,也是優(yōu)先處理事件的 View。
3. 事件的傳遞規(guī)則
在事件分發(fā)過程中,系統(tǒng)會(huì)根據(jù)事件的類型和 View 的層級(jí)關(guān)系來確定事件的傳遞規(guī)則。一般來說,事件會(huì)從父 View 傳遞給子 View,直到找到能夠處理事件的 View 或者所有的 View 都沒有處理事件。
在代碼中,事件的傳遞規(guī)則是通過一個(gè)叫做 mFirstTouchTarget 的鏈表來實(shí)現(xiàn)的。當(dāng)事件傳遞到某個(gè) View 時(shí),如果該 View 沒有處理事件,那么事件會(huì)被傳遞到下一個(gè) View,直到找到能夠處理事件的 View 或者所有的 View 都沒有處理事件。
4. 事件的消費(fèi)
在事件分發(fā)過程中,如果某個(gè) View 處理了事件,那么該事件就被消費(fèi)了,不會(huì)再傳遞給其他 View。如果事件沒有被消費(fèi),那么事件會(huì)依次傳遞給父 View,直到到達(dá)根視圖或者事件被消費(fèi)為止。
在代碼中,事件的消費(fèi)是通過一個(gè)叫做 mFirstTouchTarget 的鏈表來實(shí)現(xiàn)的。當(dāng)某個(gè) View 處理了事件,那么該 View 會(huì)成為 mFirstTouchTarget 鏈表的頭部,并且該事件就被消費(fèi)了。如果事件沒有被消費(fèi),那么該事件會(huì)被傳遞給父 View,直到到達(dá)根視圖或者事件被消費(fèi)為止。
總之,安卓事件分發(fā)機(jī)制是安卓系統(tǒng)中非常重要的一部分,它負(fù)責(zé)將用戶的觸摸事件、按鍵事件等交給相應(yīng)的控件進(jìn)行處理。在分析事件分發(fā)機(jī)制的實(shí)現(xiàn)原理時(shí),我們需要考慮到事件的優(yōu)先級(jí)、事件的傳遞規(guī)則、事件的消費(fèi)等問題。通過深入了解事件分發(fā)機(jī)制的實(shí)現(xiàn)原理,我們可以更好地
一門APP證書制作工具(https://platform.yimenapp.com/)提供APP證書在線制作,支持蘋果證書、安卓證書在線一鍵快捷制作。工具完全免費(fèi),注冊(cè)成為一門APP開發(fā)者即可使用,全中文化云端APP證書工具。
一鍵制作IOS蘋果證書,包含appstore上架證書、開發(fā)環(huán)境測(cè)試證書、ADhoc生產(chǎn)環(huán)境測(cè)試證書、在線生成P12開發(fā)者證書證書,P12推送證書、P8推送證書,快捷綁定UDID、自定義包名Bundle ID、在線獲取描述文件;
一鍵制作安卓證書,支持自定義安卓包名、簽名文件密碼(storepass)、別名(alias)、別名密碼(keypass)、公司/機(jī)構(gòu)名稱 (O)、部門 (OU)、國家/地區(qū) (C)、省份 (ST)、城市 (L)、郵箱 (E)、以及安卓證書有效期。