Android系统MotionEvent处理Receiver端基本原理总结

本文总结了Android系统中MotionEvent在Receiver端的处理原理,包括InputEventReceiver、NativeInputEventReceiver、InputConsumer的工作流程,以及MotionEvent、Batch的处理方式,详细阐述了事件的接收、转换和分发过程。
摘要由CSDN通过智能技术生成

Android系统MotionEvent处理Receiver端基本原理总结

InputEventReceiver

Android系统中activity是接收用户触屏事件的基本单位, 一个activity对应一个window, 对应一个view root. activity初始化的时候, 每一个activity实例都会创建一个用于接收事件的socket通讯通道, system server进程通过对windows的管理, 找到当前需要接收事件的activity, 通过socket直接将事件数据发送给 activity, activity内以root view为起点, 对事件进行分发处理.
每一个viewrootimpl都有一个InputEventReceiver对象, WindowInputEventReceiver在viewrootimpl:: setView时, new InputEventReceiver构造时调用nativeInit,创建NativeInputEventReceiver,将自己的指针传给NativeInputEventReceiver,同时保留NativeInputEventReceiver的指针。
所以,每一个ViewRootImpl对应一个NativeInputEventReceiver。NativeInputEventReceiver的handleEvent会调用到相应的ViewRootImpl。
NativeInputEventReceiver是一个LooperCallback
LooperCallback定义在system/core/include/utils/Looper.h中,作为Looper::addFd的回调
NativeInputEventReceiver的构造函数会接收Java层传递的main looper的MessageQueue指针, 初始化过程中, 调用main looper的addFd将改ViewRootImpl的InputChannel的接收端的fd添加到main loope的轮循中,同时将NativeInputEventReceiver注册为回调.
每次receiver端的socket中的事件到达触发NativeInputEventReceiver的函数handleEvent调用.
WindowInputEventReceiver extends InputEventReceiver
WindowInputEventReceiver:: onInputEvent , onBatchedInputEventPending 在NativeInputEventReceiver::handleEvent中被调用

NativeInputEv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值