之前对于android的按键处理过程都只有一个比较模糊的认识,这次趁着修正一个按键bug的机会,深入了追究了下这个过程。
以下是个人这次代码研读的基本收获,还是比较粗糙的,有时间还是要更加深入的学习。
android中有input reader 这么个任务一直在负责读取按键的事件,在PhoneWindowManager中,有两个
比较重要的回调注册在其中,interceptKeyBeforeQueueing 和 interceptKeyBeforeDispatching
这里主要讲讲 interceptKeyBeforeQueueing
其中interceptKeyBeforeQueueing 在读到按键 且在把按键加入到 队列之前会调用,在这里的代码中可以看到,它会传入isScreenOn, 在这个方法里就对一些特殊按键的处理,
比如HOME键 音量键等,在如队列之前就会先被处理掉,这个回调有几个特别的返回值,具体可以参看代码,主要意味着是否点亮屏幕,
是否传递给用户,是否sleep。