Android Input事件传递
文章平均质量分 94
Android Input事件传递
Geralt_z_Rivii
Android WMS开发
https://juejin.cn/user/1240706244936952
展开
-
7【Android 12】输入事件在App层的分发流程(三) —— KeyEvent处理流程
专注于KeyEvent是如何发送给View层级结构的,其他的暂时不关注。这里的mView是View层级结构的根VIew,对于Activity来说就是DecorView。原创 2022-09-08 10:35:26 · 1304 阅读 · 0 评论 -
6【Android 12】输入事件在App层的分发流程(二) —— MotionEvent处理流程
这里先将QueuedInputEvent中的mEvent向下转为MotionEvent类型,但从MotionEvent的注释来看,MotionEvent是用来报告移动(鼠标,笔,手指,轨迹球)事件的对象,覆盖的输入源似乎比pointer类型多。这里的mView是View层级结构的根VIew,对于Activity来说就是DecorView,对于非Activity窗口来说就是该窗口的自定义View,这里只分析最常见的Activity窗口。原创 2022-09-08 10:33:51 · 846 阅读 · 0 评论 -
5【Android 12】输入事件在App层的分发流程(一) —— InputStage
之前在分析InputDispatcher分发的时候,知道输入事件最终从Native层传到了framework上层,到达了ViewRootImpl通过setView方法注册的WindowInputEventReceiver的onInputEvent方法。接下来分析输入事件是如何在App层传递的。这里的InputEventCompatProcessor.processInputEventCompatibility方法主要是为Android M平台以下的Motion事件处理做一些兼容处理,对于Android原创 2022-09-07 15:25:31 · 986 阅读 · 0 评论 -
4【Android 12】InputDispatcher分发事件
1)、InputDispatcher分发线程首先根据事件类型,寻找所有可以接收当前输入事件的窗口,构建一个InputTarget队列。2)、遍历InputTarget队列,队列中的所有窗口都需要处理本次输入事件。3)、将输入事件信息封装成InputMessage对象,服务端InputChannel调用socket的send函数将InputMessage写入服务端socket的发送缓冲区。原创 2022-09-07 15:24:45 · 1506 阅读 · 1 评论 -
3【Android 12】InputReader读取事件
1)、InputReader通过EventHub.getEvents读取原始事件RawEvent。2)、InputReader调用InputReader.processEventsLocked函数将原始事件加工为NotifyArgs类型,然后存储到InputReader的QueuedInputListener类型的成员变量mQueuedListener内部的mArgsQueue中进行排队等待分发。原创 2022-09-07 15:24:21 · 1038 阅读 · 1 评论 -
2【Android 12】客户端和服务端InputChannel创建
1)、在Native层创建了一个IBinder类型的token,一个用于服务端和客户端通信的socket对,每一个socket都由一个InputChannel进行封装,即Server端InputChannel和Client端InputChannel,这两个InputChannel持有对应socket 的文件描述符,在需要通信的时候先获取到相关InputChannel对象,然后取出其中保存的socket文件描述符,通过socket相关函数向其中写入数据来进行通信。原创 2022-09-07 15:23:37 · 864 阅读 · 0 评论 -
1【Android 12】Input相关服务的创建和启动
1)、创建了一个InputManagerService对象inputManager。2)、调用了InputManagerService.start方法。先分析InputManagerService的创建流程,然后再分析start流程。原创 2022-09-07 15:22:48 · 3656 阅读 · 1 评论