Android系统--输入系统(七)Reader_Dispatcher线程启动分析
1. Reader/Dispatcher的引入
对于输入系统来说,将会创建两个线程:
Reader线程(读取事件)
Dispatcher线程(分发事件)
2. Reader/Dispatcher的创建
我们知道在Android系统中,都普遍按照面向对象的思想来编写程序,对于问题,Android一般都是创建一个类去解决,在输入系统中,有两个线程,对于这两个线程,Android系统为这两个线程创建两个类,分别为InputReaderThread类、InputDispatchThread类,类下面都会实例化对象,分别为mReaderThread、mDispatchThread,他们主要完成创建一个线程,实现循环操作。在循环体操作中,需要调用另外一个对象mReader、mDispatch的相关函数。
3. 引入EventHub类
-
EventHub类:可以接入多个设备
鼠标
键盘
触摸屏
实例化对象:mEventHub -- 实现检测、处理多个设备
4. 引入InputManager类
由于下层实现过于复杂,故对上一层应用来说需将其封装,故引入InputManager类(输入系统管理者)
-
该实例化对象:mInputManager
InputReaderThread类
InputDispatchThread类
EventHub类
5. Java层
当Java层访问InputManager类,则对其再次封装,提供NativeInputManager类作为本地实现
其实例化对象:im
6. Android输入系统类关系框图
7. Android输入系统函数调用过程
-
创建线程
创建NativeInputManagerd对象
最终导致创建InputManager对象
进而创建Reader线程、Dispatcher线程
-
启动线程
分发事件(该线程先启动)
读取事件