问题:最近客户反馈长时间未操作自动进入待机功能不起作用。
复现:
比如我设置的5分钟无操作待机,在某些播放界面下,确实不会待机。
在一些普通的APP下是可以正常待机的。
-----------------------------------------------------------------------------------------------
经过排查发现,这些播放类的APP都会设置屏幕常亮,一般的设置方法就是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
if (powerManager != null) {
mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "WakeLock");
}
}
@Override
protected void onResume() {
super.onResume();
if (mWakeLock != null) {
mWakeLock.acquire();
}
}
@Override
protected void onPause() {
super.onPause();
if (mWakeLock != null) {
mWakeLock.release();
}
}
猜测就是这个原因导致的无法进入sleep状态,所以在PMS中修改如下,保证在这种情况下,一旦到了timeout的时间,也要强制进入sleep状态:
--- a/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2211,7 +2211,7 @@ public final class PowerManagerService extends SystemService
private boolean isBeingKeptAwakeLocked() {
return mStayOn
|| mProximityPositive
- || (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) != 0
+ /*|| (mWakeLockSummary & WAKE_LOCK_STAY_AWAKE) != 0 modify by mark*/
|| (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT
| USER_ACTIVITY_SCREEN_DIM)) != 0
|| mScreenBrightnessBoostInProgress;
make systemimage编译完成,将out目录下的services.jar,services.jar.prof,services.art,services.odex,services.vdex拷贝到板子相对应的目录,确认问题已经修复好。在播放界面下到达timeout时间也能正确的进入待机,搞定。