Android系统禁止进入深休眠的方法

2024-01-08 17:13:05

在PowerManagerService中
mWakeLockSuspendBlocker?是控制CPU休眠的锁。
mDisplaySuspendBlocker?是控制显示开关的锁。

通过查看文件,亮屏时看到的也是这两个锁:

# cat /sys/power/wake_lock ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
PowerManagerService.Display PowerManagerService.WakeLocks

当按下电源键,会调用goToSleep—>goToSleepInternal —>goToSleepNoUpdateLocked—>updatePowerStateLocked;

当Activity用户无操作活动超时,会调用handleUserActivityTimeout—>updatePowerStateLocked—>;

最终走的都是updatePowerStateLocked

1. 如果想实现按 power 键不关闭屏幕,则不让mDisplaySuspendBlocker进行release操作即可。

frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
? ? ? ? ?@Override // Binder call ?
? ? ? ? ?public void goToSleep(long eventTime, int reason, int flags) { ?
+ ? ? ? ? ? ?if(true){ ?
+ ? ? ? ? ? ? ? ?return; ?
+ ? ? ? ? ? ?} ?
? ? ? ? ? ? ?if (eventTime > SystemClock.uptimeMillis()) { ?
? ? ? ? ? ? ? ? ?throw new IllegalArgumentException("event time must not be in the future"); ?
? ? ? ? ? ? ?}

2. 如果想实现关闭屏幕后系统不进入休眠,,则让mDisplaySuspendBlocker进行release操作,mWakeLockSuspendBlocker不进行release操作。

frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
? ? /**
? ? ?* Updates the suspend blocker that keeps the CPU alive.
? ? ?*
? ? ?* This function must have no other side-effects.
? ? ?*/
? ? private void updateSuspendBlockerLocked() {
?
+ ? ? ? ?if (SystemProperties.getBoolean("sys.pms.holding_wake_lock", false)){
+ ? ? ? ? ? ?Slog.d(TAG, "Holding wake lock suspend blocker");
+ ? ? ? ? ? ?return;
+ ? ? ? ?}
+
? ? ? ? ?// Then release suspend blockers if needed.
? ? ? ? ?if (!needWakeLockSuspendBlocker && mHoldingWakeLockSuspendBlocker) {
? ? ? ? ? ? ?mWakeLockSuspendBlocker.release();

文章来源:https://blog.csdn.net/sdkdlwk/article/details/135458386
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。