Android系统MotionEvent处理InputReader线程基本原理总结

基本原理

触摸事件数据的传递基本流程大致应该分为如下几个阶段
首先,当然是硬件感应 - - >
固件软件 - - >
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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值