头条Android高级开发岗二面:按下手机的-Home-键,有哪些动作和事件发生

本文深入探讨了Android系统中按下Home键时的事件处理流程,包括事件分类、准备、读取和分发。主要关注按键事件(KeyEvent),从InputEvent、InputReader到InputDispatcher的事件分发机制,并涉及PhoneWindowManager的拦截处理。
摘要由CSDN通过智能技术生成

链接:https://juejin.im/post/6844904193950498830

事件的分类

安卓系统中的事件,主要有以下几种:

  • 按键事件(KeyEvent) 由物理按键产生的事件,如:Home, Back, Volume Up, Volume Down, Camera 等。今天主要分析的就是这类事件。
  • 触摸事件(TouchEvent) 在屏幕上点击拖动,以及由它们组合的各种事件。
  • 鼠标事件(MouseEvent) 鼠标操作产生的事件
  • 轨迹球事件 (TrackBallEvent) 知道轨迹球的,怕不是要暴露年龄

安卓针对上面这些事件共性,提取了一个统一的抽象类 InputEvent 。InputEvent 提供了几个常用的抽象方法,比如 getDevice() 获得当前事件的“硬件源”,getEventTime() 获取事件发生的时间。

InputEvent 有两个子类:

  • KeyEvent 用于描述按键事件
  • MotionEvent 用来描述 Movement 类型的事件(通过 mouse, pen, finger, trackball 产生)。

而我们要监听这些事件一般也是通过对 View 设置相应的监听实现

setOnKeyListener(OnKeyListener)
setOnTouchListener(OnTouchListener)

或者也可以直接复写相关的方法

boolean onKeyDown(int keyCode, KeyEvent event)
boolean onTouchEvent(MotionEvent event)

事件处理的准备工作

事件处理设计的整体思路是驱动层会有一个消息队列来存放事件,会有一个 Reader 来不停的读取事件,一个 Dispatcher 来分发消息队列中的事件。Dispatcher 分发的事件最后会通过 jni 上报到 InputManagerService,然后通过接口最后传递给PhoneWindow,PhoneWindow 再根据不同的事件类型来做不同的处理。

我们先看一下 Reader、Dispatcher 是怎么来的。

SystemServer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值