Android 9.0灭屏流程

Android 9.0灭屏流程Power键灭屏当power键灭屏时,会在PhoneWindowManager中处理按键事件后,调用到PMS的gotoSleep()进行灭屏处理,下面直接看看PhoneWindowManger中对Power键灭屏的处理以及和PMS的交互。在按power后,PWS中如下://frameworks/base/services/core/java/com/androi...
摘要由CSDN通过智能技术生成

Android 9.0灭屏流程

Power键灭屏

当power键灭屏时,会在PhoneWindowManager中处理按键事件后,调用到PMS的gotoSleep()进行灭屏处理,下面直接看看PhoneWindowManger中对Power键灭屏的处理以及和PMS的交互。在按power后,PWS中如下:

//frameworks/base/services/core/java/com/android/
//server/policy/PhoneWindowManager.java
case KeyEvent.KEYCODE_POWER: {
   
    // Any activity on the power button stops the accessibility shortcut
    cancelPendingAccessibilityShortcutAction();
    result &= ~ACTION_PASS_TO_USER;
    isWakeKey = false; // wake-up will be handled separately
    if (down) {
   //按下时
        //处理按下事件
        interceptPowerKeyDown(event, interactive);
    } else //抬起时
        //处理抬起事件
        interceptPowerKeyUp(event, interactive, canceled);
    }
    break;
}

在处理Power键抬起事件时,开始了灭屏流程:

private void powerPress(long eventTime, boolean interactive, int count) {
   
    if (mScreenOnEarly && !mScreenOnFully) {
   
        Slog.i(TAG, "Suppressed redundant power key press while "
                + "already in the process of turning the screen on.");
        return;
    }
    if (count == 2) {
   
       ......
    } else if (interactive && !mBeganFromNonInteractive) {
   
        switch (mShortPressOnPowerBehavior) {
   
            //灭屏
            case SHORT_PRESS_POWER_GO_TO_SLEEP:
                goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
                break;
            //灭屏,直接跳过Doze状态
            case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP:
                goToSleep(eventTime, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,
                        PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
                break;
                } else {
   
                    shortPressPowerGoHome();
                }
                break;
            }
        }
    }
}

在这里调用了goToSleep()方法,该方法如下:

private void goToSleep(long eventTime, int reason, int flags) {
   
    mRequestedOrGoingToSleep = true;
    mPowerManager.goToSleep(eventTime, reason, flags);
}

最终,PhoneWindowManager中调用了PowerManager的goToSleep()方法来灭屏。我们进入到PowerManager.goToSleep()方法:

///home/wll/source_code/s219_qun/frameworks/base/core/java/
//android/os/PowerManager.java
public void goToSleep(long time, int reason, int flags) {
   
    try {
   
        mService.
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值