Android在待机时会执行到framework//base/services/core/java/com/android/server/power/Notifier.java里的sendGoToSleepBroadcast,在此次会对电源状态进行判断,若待机较慢,耗时较长,则系统会发出sendWakeUpBroadcast,此广播里有screen on广播。
修改如下:
改之前:
709 if (powerState == INTERACTIVE_STATE_AWAKE) { 710 sendWakeUpBroadcast(); 711 } else { 712 sendGoToSleepBroadcast(); 713 }
改之后:
709 if (powerState == INTERACTIVE_STATE_AWAKE) { 710 711 Slog.d(TAG, "===powerState is INTERACTIVE_STATE_AWAKE."); 712 713 if (0 != SystemProperties.getInt("sys.str.suspending", 0)) 714 { 715 Slog.d(TAG, "===is suspending so sendGoToSleepBroadcast."); 716 sendGoToSleepBroadcast(); 717 } 718 else 719 { 720 sendWakeUpBroadcast(); 721 } 722 /* 723 mHandler.postDelayed(new Runnable() { 724 @Override 725 public void run() { 726 sendWakeUpBroadcast(); 727 } 728 }, 1000); 729 */ 730 } else { 731 sendGoToSleepBroadcast(); 732 }
测试验证OK,问题解决。原本想通过delay 避免此问题,但发现不同平台待机时间有差异且会影响待机时间,所以通过一个待机属性来判断最佳。