UndimDetectorWakeLock持锁导致屏幕不灭问题处理SOP 问题描述 在Android T版本中,系统新增了SCREEN_BRIGHT_WAKE_LOCK(UndimDetectorWakeLock)机制。当设备处于低亮度(dim)状态时,用户两次打断屏幕熄灭操作就会触发系统保持屏幕常亮10分钟,此行为符合系统设计预期。
解决方案 如需关闭该功能,请按以下步骤修改源码:
- 修改源码 文件路径: frameworks/base/services/core/java/com/android/server/power/ScreenUndimDetector.java
修改内容: 将DEFAULT_KEEP_SCREEN_ON_ENABLED默认值由true改为false:
private static final boolean DEFAULT_KEEP_SCREEN_ON_ENABLED = false; // 原值为true
操作过程: 屏幕快熄灭时再点亮屏幕,连续操作X次后,发现屏幕不灭屏
android13以后引入UndimDetector机制:屏幕超时灭屏会经历两个过程:Bright->Dim,Dim->ScreenOff;在这中间只要有用户交互,屏幕都会变为Bright状态,而当检测到用户undim超过x次(可配置),会获取唤醒锁保持屏幕处于常亮状态,但不会改变系统的超时灭屏时间。
1、执行adb shell dumpsys power > power.txt, 出现问题时有UndimDetectorWakeLock 锁,此为android13 Google新增机制,属于正常现象。
Wake Locks: size=1 SCREEN_BRIGHT_WAKE_LOCK 'UndimDetectorWakeLock' ON_AFTER_RELEASE ACQ=-1m2s441ms (uid=1000 pid=1187) AI运行代码 cpp 1 2 2、配置undim次数 frameworks/base/services/core/java/com/android/server/power/ScreenUndimDetector.java
- static final int DEFAULT_UNDIMS_REQUIRED = 2;
- static final int DEFAULT_UNDIMS_REQUIRED = 5; AI运行代码 cpp 1 2 参数介绍
mKeepScreenOnEnabled(feature开关,默认开启) mKeepScreenOnForMillis(保持屏幕打开持续时间,默认10min) mUndimsRequired(允许用户undim的次数,默认2次) mMaxDurationBetweenUndimsMillis(两次undim间隔的最长时间,默认5min)