一张图带你掌握androidQ的InputManagerService启动

第一章         文章简介... 3

第二章         涉及类说明... 3

第三章         启动流程图... 4

第四章         详细代码分析... 5

 

 

 

本章主要介绍了在InputManagerService中药用到的两个很重要的linux中的机制。只有了解了该机制我们才能更好的理解InputManagerService。因为InputManagerService中全靠这两个机制来读取事件和在适当的时机唤醒读取线程。InputManagerService整体架构分为两层,一层是Java层,另一层是native层。为了方便文章中出现的IMS指的就是InputManagerService.

有人有没有疑问为什么要有Java层,逻辑全部写在native层不就好了吗?我这边给你两个思考的点:1、这个和android的架构相关,android的framework层大多数都是使用的Java编写的。如果输入全部接口放到native层,那么调用就会很繁琐。

2、为了统一接口,方便管理。

在android Q的InputManagerService的启动过程中主要设计这些类,其中有些C文件还对应了头文件.h我并未罗列。

frameworks\base\services\java\com\android\server\SystemServer.java

该类中主要启动InputManagerService

frameworks\base\services\core\java\com\android\server\input\InputManagerService.java

该类中统一管理了native层的接口,比如通知ANR,事件注入、如图所示,后续将会详细说明

frameworks\base\services\core\jni\com_android_server_input_InputManagerService.cpp

该类是Java层和native层的调用中间接口,重要的几个对象NativeInputMnager就被定义在这里面,该文件中实现了IMS中的那些接口

frameworks\native\services\inputflinger\InputManager.cpp

该文件中定义了InputDispatcher和InputReader对象的创建,以及启动和管理

frameworks\native\services\inputflinger\dispatcher\InputDispatcherFactory.cpp

用于创建InputDispatcher对象

frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp

里面是事件分发的主要逻辑

frameworks\native\services\inputflinger\InputClassifier.cpp

该类里面维护了一个重要的对象就是InputDispatcher对象,他的主要目的是将InputReader中读取到事件放到InputDispatcher所维护的队列

frameworks\native\services\inputflinger\reader\InputReaderFactory.cpp

用于创建InputReader对象

frameworks\native\services\inputflinger\InputReaderBase.cpp

frameworks\native\services\inputflinger\dispatcher\InputDispatcherThread.cpp

事件分发线程

frameworks\native\services\inputflinger\reader\InputReader.cpp

事件读取的主要逻辑

 

在此处不对这些类进行详细的说明,在后续的文章中将会详细的讲解每个方法和作用。

这张时序图,描述了IMS的启动时序过程,完整的表达了整个IMS启动过程中所涉及的对象和一些方法调用。

 

 

InputManagerService的启动是在SystemServer加载的时候进行创建和启动的。先来认识一下IMS的定义

IMS其实并不是直接继承Service而是继承Stub,而Stub是继承自Ibinder的,也就是桌IMS其实是一种Binder机制,有兴趣的同学可以去详细看看这块,这篇文章中不进行详细讲解。

为了方便分析我将代码做了如下简化,如图所示:InputManagerService启动

 

 

 

 

这里接的是最开始那块,WMS的具体创建我这边就不讲接了,后续再WMS的分析中在进行详细的讲解。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值