美文网首页
InputManagerService

InputManagerService

作者: 风骚的IT男 | 来源:发表于2018-10-18 16:17 被阅读0次

2InputManagerService 从名称可以理解,输入管理服务

谈到Service,特别系统的Service,启动就是SystemServer。

一、初始化

java层

流程图详解

1、初始化,在SystemServer 调用在startOtherService 中初始化的InputManagerService

2、初始化过程中,分别初始化了InputManagerHandler,调用Jni 的 nativeInit,

这里的关注点是 传入了DisplayThread的 Looper,其实就是用它的Messagequeue。传入native 层,接受处理事件。

Native 层的初始化

流程图详解

1、Jni 中初始化,mPtr 就是 NativeInputManager,同样对应参数传入

2、NativeInpuManager 初始化InputManager 对应的是(流程图C_+名称,表示是C++ 代码)

3、InputManager 初始化 InputDispatcher 以及InputReader,派发,以及读取。

到这里,大概的初始化流程就结束了

二、启动

启动流程

启动还是有SystemServer发出

流程图简要说明

1、这里只需关注nativeStart(mPtr),上文有提到mPtr  ->NativeInputManager。

2、就是把InputDispatcher 以及InputReader run起来

      run 不禁会想到线程。对这里是线程,但InputDispatcher 、InputReader 并不是线程对象。

   InputDispatcher  对应 InputDispatcherThread ,InputReader  对应InputReaderThread 

   在初始化InputManager的时候 ,线程开始创建的初始化的。(run 其实调用的线程的run)

读取事件流程

流程图简要说明

1、这里两个线程就工作了,启动线程时会不断的调用线程的threadLoop()函数,直到其返回false则停止。实际上,Android系统mDispatcherThread&mReaderThread的threadLoop()函数都是反馈true,所以这两个线程一旦开机便不会停止。

2、processEventsForDeviceLocked,是处理key 事件的,后面交给InputDevice 处理,InputDevice,可以理解输入设备,终端有各种输入设备。

3、InputDevice,又让InputMapper  处理。

InputDevice,InputMapper  是什么时候创建的,关系是什么?

先讲下InputDevice 的由来


时序图简要说明

1、可以看出,addDevice 同样是通过读取底层事件上报,来添加,删除没有标出,流程与add 一致。

2、在createDeviceLocked,中,分别创建了InputDevice,InputMapper,device 放入集合保存,管理

     device->addMapper(new KeyboardInputMapper(device, keyboardSource, keyboardType));

    mapper add 到  device中。add,说明也是个集合。

InputMapper 有很多子类,KeyboardInputMapper,SingleTouchInputMapper,MultiTouchInputMapper,这里不一一举例。

读取怎么分发?

 时间读取到了,那又和上文提到的Dispatcher 有什么关系哩?

时序图简要说明

1、getListener->notifyKey,如时序图的备注,事件都会加入一个队列。

2、readThread 每次循环都会 flush,把事件发出去,

      看代码就是mInnerListener->InputDispatcher 

在初始化 InputReader的时候,初始化 传的就是InputListenerInterface。

      InputDispatcher 实现了InputDispatcherInterface

       InputListenerInterface 继承了 InputListenerInterface

      最后会调用 InputDispatcher 的notifyKey

盗图一张

上图,在InputMapper 中处理事件的时候,EV_* 代表的含义。

以上,InputReader,就告一段落了。,后面继续分析InputDispatcher的  过程。

相关文章

  • InputManagerService

    2InputManagerService 从名称可以理解,输入管理服务 谈到Service,特别系统的Servic...

  • InputManagerService

    概述 InputManagerService 是Android里面一个重要的service。它用于管理整个系统的输...

  • InputManagerService

    Input框架 每增加一个WindowState.java,WMS都会通过registerInputChannel...

  • InputManagerService

    InputManagerService服务创建 /frameworks/base/services/core/ja...

  • `InputManagerService`原理

    InputManagerService原理 在SystemServer的startOtherServices里面开...

  • 按键 | InputManagerService

    本文主要讲一下inputmanager相关的,即驱动把数据上报到用户空间后,用户空间到应用这么个流程,内核的inp...

  • Android Input子系统核心服务

    基于Android 7.0源码分析 核心服务的类图 InputManagerService负责管理Android输...

  • android输入系统

    InputManagerService(IMS) Linux内核,接受输入设备的中断,并将原始事件的数据写入设备节...

  • Android | InputManagerService与输入

    前言 事件分发机制是Android中的基础而重要的知识,一般认为Activity#dispatchKeyEvent...

  • InputManagerService 启动流程分析

    和你一起终身学习,这里是程序员 Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、前言二、启动...

网友评论

      本文标题:InputManagerService

      本文链接:https://www.haomeiwen.com/subject/zxfszftx.html