android 设置休眠时间后,系统行为简析

本文探讨了Android设备在不同场景下屏幕熄灭时间的差异,特别是设置休眠时间后在launcher和锁屏界面的行为。作者通过研究代码发现,熄屏时间取决于`mUserActivitySummary`的计算,特别是`USER_ACTIVITY_SCREEN_BRIGHT`和`USER_ACTIVITY_SCREEN_DIM`标志位。在锁屏界面,系统会设置`mUserActivityTimeoutOverrideFromWindowManager`为10s,导致快速熄屏,这与设置的休眠时间不符。问题的关键在于`getScreenOffTimeoutLocked()`方法及其影响因素。
摘要由CSDN通过智能技术生成

        android手机进入设置,在进入显示,有个休眠时间的选项。可以设置多久不操作后熄灭屏幕。android熄灭屏幕实际根据系统当前wakeLock锁的数量和类型有关,本篇文章不讨论这个问题。只是本人发现了一个奇怪的现象:


1.设置休眠时间为1分钟,在launcher界面不做任何操作,大概一分钟左右灭屏,和设置中时间相同。

2.灭屏后按电源键唤醒屏幕,在锁屏界面不做任何操作,感觉十秒左右屏幕已经熄灭,远远达不到设置中时间。


        到底为什么会出现这个现象呢?我们可以猜测肯定系统有判断是否锁屏,然后对自动灭屏时间进行了不同的设置,下面验证我们的猜测。


        经过一番研究代码最终发现关于是否灭屏的判断在

    private boolean isBeingKeptAwakeLocked() {
        return mStayOn
                || mProximityPositive
                || (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) != 0
                || (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT
                        | USER_ACTIVITY_SCREEN_DIM)) != 0
                || mScreenBrightnessBoostInProgress;
    }

        如果该方法返回false就会灭屏,意味着其中每一项都要为false,其中和这个现象相关的为

        (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM)) != 0

      USER_ACTIVITY_SCREEN_BRIGHT指的是屏幕亮,指的是USER_ACTIVITY_SCREEN_DIM屏幕暗,也就意味着,mUserActivitySummary的标志位不能有亮和暗这两个属性。mUserActivitySummary主要在updateUserActivitySummaryLocked这个方法中更新。所以主要的逻辑在该方法中。

private void updateUserActivitySummaryLocked(long now, int dirty) {
        // Update the status of the user activity timeout timer.
        if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY
                | DIRTY_WAKEFULNESS | DIRTY_SETTINGS)) != 0) {
            mHandler.removeMessages(MSG_USER_ACTIVITY_TIMEOUT);


            long nextTimeout = 0;
            if (mWakefulness == WAKEFULNESS_AWAKE
                    || mWakefulness == WAKEFULNESS_DREAMING
                    || mWakefulness == WAKEFULNESS_DOZING) {
                final int sleepTimeout = getSleepTimeoutLocked();
   
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值