Android高版本 手动唤醒屏幕后未及时关闭屏幕问题分析

2024-12-12  本文已影响0人  珩珩保镖

Android高版本 手动唤醒屏幕后未及时关闭屏幕问题分析

简述

Android 14 (sdk 34) 设置屏幕超时后短时间内多次手动唤醒屏幕后,关闭屏幕(或进入屏保)时间和屏幕超时设置的时间不一致;

问题描述

在Android 11之后版本,设置屏幕超时15s( 设置->显示->屏幕超时->选择15s ); 等待15秒后关闭屏幕(或进入屏保);然后马上操作唤醒屏幕; 等待15s 后关闭屏幕;再次唤醒后再次等待15s发现系统没有关闭屏幕;等10分钟左右发现屏幕才会关闭; 如果不关闭屏幕马上唤醒,会发现再次关闭屏幕的时间和设置的屏幕超时时间一致;

问题分析

这个现象从操作上看比较人性化的, 像是操作系统的一种自适应亮度和休眠机制.

查找framework源码修改记录发现git commit

git commit.png

其中commit描述如下:

Keep screen on when user undims it manually

When user manually undims the screen x times - it's a clear indication
that they want to keep it on and dimming is not wanted. For such case,
keep the screen on temporarily by acquiring a wakelock,
without changing the actual timeout setting.

问题解决

如果接受这个休眠机制那边可以不用处理

如果不接受我们可以将com.android.server.power.ScreenUndimDetector#systemReady里面的mWakeLock赋值去掉

文件路径frameworks\base\services\core\java\com\android\server\power\ScreenUndimDetector.java

    public void systemReady(Context context) {
        readValuesFromDeviceConfig();
        DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                context.getMainExecutor(),
                (properties) -> onDeviceConfigChange(properties.getKeyset()));

        /*final PowerManager powerManager = context.getSystemService(PowerManager.class);
        mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                        | PowerManager.ON_AFTER_RELEASE,
                UNDIM_DETECTOR_WAKE_LOCK);*/
    }
上一篇 下一篇

猜你喜欢

热点阅读