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. linux下mysql连接jar包的位置在哪里?

    linux下连接mysql数据库,肯定也会用到驱动jar包. 该jar包应该被置于jdk安装路径下jre文件夹lib目录的ext文件夹下.例如我的JDK安装路径为/usr/java/jdk1.6.0_ ...

  2. LeetCode_Integer to Roman

    Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...

  3. ##解决 ViewPager 调用 notifyDataSetChanged()无刷新:原理、解决办法##

    一.原理 转自:http://www.cnblogs.com/maoyu417/p/3740209.html 转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分 ...

  4. 贝塞尔曲线:原理、自定义贝塞尔曲线View、使用!!!

    一.原理 转自:http://www.2cto.com/kf/201401/275838.html Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation Pr ...

  5. UESTC_One Step Two Steps CDOJ 1027

    As we all know,the handsome boy, Zcat, has a fever of flat shoes. He sings it on the class, in the d ...

  6. Windows多线程同步系列之二-----关键区

    关键区对象为:CRITICAL_SECTION 当某个线程进入关键区之后,其他线程将阻塞等待,知道该线程释放关键区的拥有权. 关键区同步主要有以下几个API 初始化关键区对象,无返回值,传入一个关键区 ...

  7. Linux进程笔记

    进程及作业管理 Uninterruptible sleep: 不可中断的睡眠Interruptible sleep:可中断睡眠 kernel:init: COW: Copy On Write, 写时复 ...

  8. 【转】使用 udev 高效、动态地管理 Linux 设备文件

    简介: 本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本 ...

  9. Java学习笔记50:JSONObject与JSONArray的使用

    Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...

  10. linux网络编程--跳水send和recv

    要了解一个概念:所有的TCP socket在内核具有发送缓冲器和接收缓冲器.TCP除了全双工操作模式TCP滑模取决于这两个单独buffer和这个buffer填充状态. 接收缓冲器数据缓存入内核.应用进 ...