1. 初始化
- 初始化Input Dispatcher和InputReader, 用于上报事件;
- 初始化Input DIspatcherThread 和InputReaderThread,用于轮询可用事件;
- 启动Input DIspatcherThread 和InputReaderThread, 开始轮询事件,并分发;

2. InputChannel服务端的创建和监听FD的注册
- 创建一组InputChannel Pair, 用于进程通信;
- 注册服务端inputChannel(处于Input进程), 用于发送input事件到上层;
- 返回客户端inputChannel, 后面进行注册,用于接收服务端发送的事件;
[Input channel pair 的创建是使用linux的socketpair函数]

3. InputChannel客户端注册和监听上报流程
- 注册客户端inputChannel (InputEventReceiver), 开始接收到来的Input事件;
- 使用InputEventReceiver接受服务端发来的Input事件, 并上报到framewor java层;

4. Input FW! Input Native事件上报流程
- InputReader使用EventHub从底层获取上报的Event数据, 并enqueue;
- Enqueue之前的拦截判断(根据回调PhoneWindowManager中对应函数的返回值)
- Enqueue;
4, InputDispatcher从 队列中获取到InputEvent数据, 并开始分发前准备
- 时间分发前的拦截判断(同上);
- 开始分发Input事件;

5. 在Framework注册一个新的监听事件, 需要的步骤
InputChannel[] channels = InputChannel.openInputChannelPair(name);
mServerChannel = channels[0];
if (inputChannel != null) {
channels[1].transferTo(inputChannel);
channels[1].dispose();
mClientChannel = inputChannel;
} else {
mClientChannel = channels[1];
}
mService.mInputManager.registerInputChannel(mServerChannel, null);
final classMyInputEventReceiver extends InputEventReceiver {
public HideNavInputEventReceiver(InputChannel inputChannel, Looper looper) {
super(inputChannel, looper);
}
@Override
public void onInputEvent(InputEvent event) {
}
}