【Android必問(wèn)面試題】Android事件分發(fā)機(jī)制

什么是事件分發(fā)?

簡(jiǎn)單來(lái)說(shuō),就是我們通過(guò)屏幕與手機(jī)進(jìn)行交互的時(shí)候,每次的點(diǎn)擊,移動(dòng),長(zhǎng)按等會(huì)產(chǎn)生一個(gè)個(gè)的事件。每一個(gè)事件又是通過(guò)屏幕傳遞給每一個(gè)ViewView接收到這些事件的時(shí)候可以對(duì)該事件的行進(jìn)過(guò)程進(jìn)行控制,也就是自己消費(fèi)掉或者忽略掉。

事件的常見類型

  • ACTION_DOWN
    手指按下的動(dòng)作
  • ACTION_MOVE
    手指按下之后,不包含按下的動(dòng)作
  • ACTION_UP
    手指抬起的動(dòng)作
  • ACTION_CANCEL
    事件取消

也就是說(shuō)當(dāng)手指按下屏幕開始,事件會(huì)按照一定的順序進(jìn)行產(chǎn)生,知道手指離開屏幕,這樣的產(chǎn)生的一系列事件,我們會(huì)稱之為事件序列。
當(dāng)然不是每一種事件都會(huì)被執(zhí)行,這個(gè)我們?cè)谥笞鲋v解。

事件的傳遞的層級(jí)關(guān)系

在上面我們都在說(shuō)當(dāng)手指按下屏幕,這里對(duì)于我們Android app開發(fā)者來(lái)說(shuō)就對(duì)應(yīng)了我們每一個(gè)Activity,但是Activity只負(fù)責(zé)聲明周期的變化,真正控制視圖的是每一個(gè)Activity包含的window,window中又包含了一個(gè)DecorView,這里的DecorView是一個(gè)頂級(jí)的view,所以view中的所有事件都是要經(jīng)過(guò)DecorView才能傳遞到每一個(gè)view當(dāng)中。
最終事件傳遞的層級(jí)關(guān)系如下圖所示:

未命名文件.jpg

由上可知事件傳遞的主要對(duì)象為ActivityViewGroup,View這三個(gè)。所以我們只需要研究事件在這三個(gè)對(duì)象間是怎么進(jìn)行傳遞的。

Activity的事件分發(fā)流程

在Activity中,系統(tǒng)主要通過(guò)下面兩個(gè)方法進(jìn)行事件傳遞:

  • dispatchTouchEvent(android.view.MotionEvent ev)
  • onTouchEvent(android.view.MotionEvent event)

下面看一下Activity的事件分發(fā)流程圖:


未命名文件 (1).jpg

ViewGroup的事件分發(fā)流程

在ViewGroup中,系統(tǒng)主要通過(guò)下面三個(gè)方法進(jìn)行事件傳遞

  • dispatchTouchEvent(android.view.MotionEvent ev)
  • onInterTouchevent(android.view.MotionEvent ev)
  • onTouchEvent(android.view.MotionEvent event)

下面看一下ViewGroup的事件分發(fā)流程圖:


ViewGroup事件分發(fā)流程.jpg

View的事件分發(fā)流程

在Activity中,系統(tǒng)主要通過(guò)下面兩個(gè)方法進(jìn)行事件傳遞:

  • dispatchTouchEvent(android.view.MotionEvent ev)
  • onTouchEvent(android.view.MotionEvent event)
View的事件分發(fā)流程.jpg

在面試中盡可能的把這三個(gè)流程圖了解消化,可以簡(jiǎn)要的畫U型圖去介紹三者的關(guān)系,在說(shuō)的過(guò)程中盡量把每個(gè)對(duì)象的分發(fā)流程說(shuō)清楚會(huì)有很好的加分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容