http://blog.csdn.net/elfylin/article/details/8008763

一. 接口
KeyEvent.Callback和View.OnKeyListener

二. 流程
a.Activity.dispatchKeyEvent
a.1.win.superDispatchKeyEvent(win=getWindow)
Window.superDispatchKeyEvent->PhoneWindow.superDispatchKeyEvent
a.2mDecor.superDispatchKeyEvent (mDecor=FrameLayout)
PhoneWindow.mDecor.superDispatchKeyEvent
a.3view. dispatchKeyEvent (Window.dispatchKeyEvent)
View.dispatchKeyEvent(View=mDecor)
b.event.dispatch
mOnKeyListener.onKey

三.Event
a. who call onKeyDown?
b. who call dispatchKeyevent
c. dispatchKeyEvent的实现在PhoneWindow.dispatchKeyEvent
PhoneWindows重载了View的dispatchKeyEvent和KeyEventCallback的OnKeyXX
首先调用dispatchKeyEvent,如果返回false才调用onKeyXX
在其父类View的dispatchKeyEvent,会调用KeyListener。

四.优先级
1.当一个Activity中收到事件,首先查看自己的decor是否有焦点,
1.1如果有调用它的dispatchKeyEvent,(即调用它的keylistener);
1.2否则,获取焦点窗口,调用焦点窗口的dispatchKeyEvent;
2.如果上面都为false,就调用自己的onkeydown和onkeyup事件。

五 入口
HelloworldActivity.onKeyDown(int, KeyEvent) line: 25
KeyEvent.dispatch(KeyEvent$Callback, KeyEvent$DispatcherState, Object) line: 2555
HelloworldActivity(Activity).dispatchKeyEvent(KeyEvent) line: 2358
HelloworldActivity.dispatchKeyEvent(KeyEvent) line: 29
PhoneWindow$DecorView.dispatchKeyEvent(KeyEvent) line: 1806
ViewRootImpl.deliverKeyEventPostIme(KeyEvent, boolean) line: 3328
ViewRootImpl.handleFinishedEvent(int, boolean) line: 3301
ViewRootImpl.handleMessage(Message) line: 2461 
ViewRootImpl(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 137
ActivityThread.main(String[]) line: 4444
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 511
ZygoteInit$MethodAndArgsCaller.run() line: 787 
ZygoteInit.main(String[]) line: 554
NativeStart.main(String[]) line: not available [native method]

KeyEvent的更多相关文章

  1. Android中的Keyevent

    使用Adb shell command直接送key event給Android adb shell input keyevent 7 # for key '0' adb shell input key ...

  2. Android按键事件处理流程 -- KeyEvent

    刚接触Android开发的时候,对touch.key事件的处理总是一知半解,一会是Activity里的方法,一会是各种View 中的,自己始终不清楚到底哪个在先哪个在后,总之对整个处理流程没能很好的把 ...

  3. adb shell input keyevent code详解

    adb shell input keyevent 7 # for key '0' adb shell input keyevent 8 # for key '1' adb shell input ke ...

  4. Android keyevent 中的各个值

    Android keyevent 中的各个值,在使用adb shell input 的时候用得到. 是从http://blog.csdn.net/huiguixian/article/details/ ...

  5. out/target/common/obj/PACKAGING/public_api.txt android.view.KeyEvent.KEYCODE_has changed value from

    编译出错: out/target/common/obj/PACKAGING/public_api.txt:22549: error 17: Field android.view.KeyEvent.KE ...

  6. android KeyEvent for dot "."

    android连接了4x4的物理按键,需要映射".". 在linux驱动层注册了按键KEY_DOT, 写android的app的时候却没有对应的宏KEYCODE_DOT.只有KEY ...

  7. Android Tv 中的按键事件 KeyEvent 分发处理流程

    这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...

  8. Android View框架总结(九)KeyEvent事件分发机制

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52335094 本篇开始分析按键消息事件分发(PS:本篇文章中源码均是 ...

  9. ADB——keyevent命令

    基本格式 adb shell input keyevent xxx # xxx为具体操作对应的数字 keycode 官方 KEYCODE 链接:戳这里 0 KEYCODE_UNKNOWN 未知按键 1 ...

随机推荐

  1. 最短路(Dijkstra模板题)

    就不写题目链接了 Sample Input 5 5 点个数a,边个数b 1 2 20 点,点,权值 2 3 30 3 4 20 4 5 20 1 5 100 求出1到a的最短距离 Sample Out ...

  2. C# Nullable可空类型

    一个Nullable类型就是基本类型加上一个"是否为null指示器"的合成类型.对于一个类型,如果既可以给他分配一个值,也可以给它分配null引用,我们就说这个类型是可空的. 可空 ...

  3. Linux的环境变量配置

    以下都是环境变量相关的配置文件 1)/etc/enviroment 是系统的环境变量. (2)/etc/profile: 是所有用户的环境变量.当用户第一次登录时,该文件被执行. 并从/etc/pro ...

  4. lisp构造表

    CONS 操作符 我们刚刚学习了如何拆分一个表,现在学习如何合并一个表. CONS 操作符就是做这件事情的. 假设有一个列表 (1 2 3) ,我们做一下 CAR 操作: (car '(1 2 3)) ...

  5. Linux系统维护修复模式

    基于PXE方式的Linux系统维护工具箱     在安装RedHat Linux系统的过程中,我们知道可以通过PXE方式进行安装,从而解决了无光驱或无安装介质(光盘)来安装操作系统.但是当系统由于某种 ...

  6. 关于Winsock编程中IO重叠的概念

    我在看<Windows网络与通信程序设计>(王艳平)这本书时,对重叠IO很不理解,突然就冒出这么一个概念,没一点头绪.就目前的理解做一个整理. 第一种理解:OVERLAPPED,顾名思义为 ...

  7. web前端设计:JQuery MINI UI

    JQuery MINIUI 个人感觉用起来很爽,所以在此记录之,以后开发过程可能作为备选项.它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验.在线下载地 ...

  8. Amdroid示例:利用Gson生成或解析json

    转自:http://www.cnblogs.com/liqw/p/4266209.html 目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json.下载Gson:https: ...

  9. UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>

    I - 邱老师选妹子(二) Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  10. 剑指offer-面试题18.树的子结构

    题目:输入两棵二叉树A和B,判断B是不是A的子结构. 二叉树节点定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; ...