BACK按键流程

本文深入探讨了Android中BACK按键的处理流程,从DecorView的dispatchKeyEvent开始,依次经过Activity、Dialog、ViewGroup和View的事件分发,直至PhoneWindow的onKeyDown和onKeyUp。详细解析了每个层级如何响应和处理BACK按键事件。
摘要由CSDN通过智能技术生成

事件被派发到View层次结构的根节点DecorView开始分析,这里我们先来看看DecorView#dispatchKeyEvent方法,代码如下:

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

final int keyCode = event.getKeyCode();

final int action = event.getAction();

final boolean isDown = action == KeyEvent.ACTION_DOWN; 

/// 1. 第一次down事件的时候,处理panel的快捷键

if (isDown && (event.getRepeatCount() == 0)) {

// First handle chording of panel key: if a panel key is held

// but not released, try to execute a shortcut in it.

if ((mPanelChordingKey > 0) && (mPanelChordingKey != keyCode)){

boolean handled = dispatchKeyShortcutEvent(event);

if (handled) { return true; }

// If a panel is open, perform a shortcut on it without the

// chorded panel key

if ((mPreparedPanel != null) && mPreparedPanel.isOpen) {

if (performPanelShortcut(mPreparedPanel, keyCode, event, 0)) { returntrue; }

}

/// 2. 这里是我们本文的重点,当window没destroy且其Callback非空的话,交给其Callback处理

if (!isDestroyed()) {

// Activity、Dialog都是Callback接口的实现

final Callback cb = getCallback();

// mFeatureId < 0 表示是application的DecorView,比如Activity、Dialog

final boolean handled = cb != null && mFeatureId < 0 ?cb.dispatchKeyEvent(event) // 派发给callback的方法 : super.dispatchKeyEvent(event);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值