基本原理
触摸事件数据的传递基本流程大致应该分为如下几个阶段
首先,当然是硬件感应 - - >
固件软件 - - >
Kernel驱动, 驱动将数据写入设备文件 - - >
用户空间进程, android中对应的当然是system进程, 首先input reader线程从设备文件读取数据 - - >
system进程input dispatcher线程拿到input reader线程转化后的数据,准备进行分发 - - >
app进程, native层receiver对象被回调, 接收数据 - - >
app进程, java层ViewRootImpl对象被回调, 接收数据 - - >
最后就是我们熟悉的decorview - > activity - > window - > decorview - > viewgroup
这次先分享一下input reader线程对触摸事件数据处理的大致原理。个人感觉逻辑细节还是相当复杂的,所以,不足之处还请高手们多多指点。
android将从设备文件中读取数据的操作封装在EventHub类, 当有数据到达设备文件后, input reader线程会被唤醒, 调用mEventHub→getEvents获取数据, 数据格式为RawEvent, input reader的主要工作就是将RawEvent转化为Motion Event交给input dispatcher进行分发.
设备文件目录在/dev/input
通过命令 adb shell getevent -p查看哪个设备文件是用于触摸事件的
adb shell getevent /dev/input/设备文件名, 可以打印数据
RawEvent
nsecs_t when;
int32_t deviceId;
int32_t type;
int32_t code;
int32_t value;
type和cod

本文总结了Android系统中MotionEvent处理的基本原理,从硬件感应到数据转化为MotionEvent的过程。首先,硬件事件通过Kernel驱动传递到Input Reader线程,接着在EventHub中获取RawEvent数据并转化为MotionEvent。Input Reader线程根据slot协议处理多点触摸事件,通过MultiTouchInputMapper和MultiTouchMotionAccumulator将RawEvent转化为CookedPointerData,然后输入数据队列供Input Dispatcher分发。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



