Android系统禁止进入深休眠的方法
在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();
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!