为什么KeyEvent会先被PhoneWindowManager.java(Ics 4.03) 文件的 interceptKeyBeforeDispatching()处理;
来源:互联网 发布:热门推荐算法 编辑:程序博客网 时间:2024/06/09 20:38
为什么KeyEvent会先被PhoneWindowManager.java(Ics 4.03)文件的
interceptKeyBeforeDispatching()处理;
一些按键HOME/MENU/SEARCH需要特殊处理,不会发送到activity,android系统都是在
interceptKeyBeforeDispatching()做特殊处理,那么为什么按键会先被这个函数接受,而不是别的函数,系统Event的传递流程是什么?
下面会一步步揭晓;
SystemServer.java
System.loadLibrary("android_servers");
libandroid_servers:
extern "C" jintJNI_OnLoad(JavaVM* vm, void* reserved)
{
register_android_server_InputManager(env);
}
这样:
Java层里面nativeInit就对应 native层的: android_server_InputManager_nativeInit
建立java到c的关联:
在native层,会有一个thread一直去polling linux的input输入;
如果是TYPE_KEY的话,会call下列函数:
InputDispatcher.cpp
dispatchKeyLocked()->doInterceptKeyBeforeDispatchingLockedInterruptible()
->mPolicy->interceptKeyBeforeDispatching()
mPolicy实体是C 层的com_android_server_InputManager.cpp,
那么C层的interceptKeyBeforeDispatching()是如何实现的呢?
GET_METHOD_ID(gCallbacksClassInfo.interceptKeyBeforeDispatching,clazz,
"interceptKeyBeforeDispatching",
"(Lcom/android/server/wm/InputWindowHandle;Landroid/view/KeyEvent;I)J");
所以C层的interceptKeyBeforeDispatching对应java层的:
InputManager.java-> interceptKeyBeforeDispatching;
这样就来到的java的世界,在C层的keyevent就传递给了java层;
再来看java层的处理流程
public long interceptKeyBeforeDispatching(InputWindowHandlefocus,
KeyEvent event, intpolicyFlags) {
return mWindowManagerService.mInputMonitor.interceptKeyBeforeDispatching(
focus, event, policyFlags);
}
所以interceptKeyBeforeDispatching函数最终会调用
finalInputMonitor mInputMonitor = new InputMonitor(this);
public long interceptKeyBeforeDispatching(
return mService.mPolicy.interceptKeyBeforeDispatching(windowState, event,policyFlags);
}
0 0
- 为什么KeyEvent会先被PhoneWindowManager.java(Ics 4.03) 文件的 interceptKeyBeforeDispatching()处理;
- Android 的 KeyEvent : 從 EventHub 到 PhoneWindowManager
- PhoneWindowManager处理事件分析(十一)
- Android 中keyEvent的消息处理
- 按键事件(KeyEvent)的监听与处理
- Android 中keyEvent的消息处理
- Android 中keyEvent的消息处理
- java中KeyEvent类的使用
- Dialog 处理KeyEvent
- Dialog 处理KeyEvent
- 【Android TV】按键事件KeyEvent的分发处理流程解析
- Java按键事件KeyEvent
- java awt KeyEvent
- Java KeyEvent事件键码值
- Java按键事件KeyEvent
- java.awt.event.KeyEvent(键盘按键对应的KeyCode)
- java SWT:MouseEvent,KeyEvent中stateMask字段的用法
- 理解ICS Surface和SurfaceFlinger的处理流程
- js判断身份证是否合法
- java中的Date、Calendar的区别和联系
- 大数据时代互联网创业者的蓝海战略思维
- textComponent
- Android加速球、360加速球
- 为什么KeyEvent会先被PhoneWindowManager.java(Ics 4.03) 文件的 interceptKeyBeforeDispatching()处理;
- 获取android手机cpu核心数
- A Recap of Request Handling in Go
- 如何用DIV标签让内容居中显示出来
- 【OpenCV】Sobel算子理论与OpenCV代码实现
- ios 企业版(in house)及打越狱包
- Hadoop安装配置
- 【译】MVC3 20个秘方-(13)使用Ajax Helper 提高用户体验
- 使用DecoratedField装饰SWT Control