Android Input子系统 - InputManagerService

本文详细探讨了Android中的InputManagerService,作为核心服务,它管理所有输入设备,包括触摸屏、键盘和传感器。InputManagerService分为Java层和Native层,Java层对外提供服务,Native层处理Linux输入事件。启动过程涉及SystemServer、InputReader、InputDispatcher和EventHub等组件,通过复杂的交互将输入事件分发给目标窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

​编辑从简单的分类可以看做是两层:

输入模块的组成:

InputManagerService启动过程

IMS的启动


  • InputManagerService是Android framework中核心service之一,Android framework层涉及的代码也是非常多
  • IMS(InputManagerService)管理android系统中的所有输入,包括常见的触摸屏和键盘,还包括各种传感器的输入。
  • IMS和其他的系统服务一样,都是在SystemServer中创建的
frameworks/native/services/inputflinger/
- InputDispatcher.cpp
- InputReader.cpp
- InputManager.cpp
- EventHub.cpp
- InputListener.cpp
frameworks/native/libs/input/
- InputTransport.cpp
- Input.cpp
- InputDevice.cpp
- Keyboard.cpp
- KeyCharacterMap.cpp
- IInputFlinger.cpp
frameworks/base/services/core/
- java/com/android/server/input/InputManagerService.java
- jni/com_android_server_input_InputManagerService.cpp


从简单的分类可以看做是两层:

  • Java层,InputManagerService负责对外提供服务,给WindowManagerService提供输入信息的回调
  • Native层,监控Linux上报的输入事件,把事件处理成Android的KeyCode,给想要处理的Window发送输入事件

前面介绍了Linux的输入子系统,可以看到应用层的输入子系统框架都是基于驱动抽象出来的文件系统设备节点的读写来处理的,虽然说起来比较简单,但是在整个复杂的Android操作系统中,把输入事件发送到UI层处理还是非常复杂的一个过程。

当用户按下按键或者触摸屏幕时,输入系统会取出驱动上报的时间,经过层层封装转换成Android层能识别的KeyEvent或者MotionEvent,最后交付给对应的目标窗口来消费输入事件。

输入模块的组成:

  • Native层的InputReader负责从EventHub取出事件并处理,再交付给InputDispatcher线程
  • Native的InputDispatcher线程接收到来自InputReader的输入事件,并记录WMS的窗口信息,用来派发到合适的窗口
  • Java层的InputManagerService跟WMS交互,WMS记录窗口信息,同步更新到IMS,为InputDispatcher线程正确派发事件到ViewRootImpl提供保障


InputManagerService启动过程


InputManagerService作为system_server中的重要服务,继承与IInputManager.Stub,作为binder的服务端,client位于InputManager的内部通过IInputManagerStub.asInterface()获取binder的代理端,C/S两端通信协议是由IInputManager.aidl来定义。

IMS涉及到的重要的类

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值