Android事件分发原理

2022-03-12  本文已影响0人  三十五岁养老

在Android中,Touch事件的分发分服务端和应用端。

服务端

服务端由WindowManagerService(借助InputManagerService)负责采集和分发的,在应用端则是由ViewRootImpl(内部有一个mView变量指向View树的根,负责控制View树的UI绘制和事件消息的分发)负责分发的。

image.png

当输入设备可用时,比如触屏,Linux内核会在/dev/input中创建对应的设备节点。
IMS(InputManagerService)监听/dev/input下的所有的设备节点,当设备节点有数据时会将数据进行加工处理并找到合适的Window(WMS寻找),将输入事件派发给他

client端

事件分发.PNG

具体在传递事件的时候,是由以下三个方法来控制的:

dispatchTouchEvent : 分发事件
onInterceptTouchEvent : 拦截事件
onTouchEvent : 消费事件
这三个方法有一个共同点,就是他们具体是否执行了自己的功能(分发、拦截、消费)完全由自己的返回值来确定,返回true就表示自己完成了自己的功能(分发、拦截、消费)。不同之处除了功能外,还有使用的场景。dispatchTouchEvent()和onTouchEvent()这两个方法,无论是Activity ViewGroup 还是View,都会被用到。而onInterceptTouchEvent()方法因为只是为了拦截事件,那么Activity和View一个在最顶层,一个在最底层,也就没必要使用了。因此在View 和 Activity中是没有onInterceptTouchEvent()方法的。

参考链接:https://blog.csdn.net/qq_42165012/article/details/123163462

上一篇 下一篇

猜你喜欢

热点阅读