Android PowerManagerEx.WifiDisable唤醒锁使我的系统处于唤醒状态
使用adb shell dumpsys batterystatsAndroid PowerManagerEx.WifiDisable唤醒锁使我的系统处于唤醒状态,android,Android,使用adb shell dumpsys batterystats Statistics since last unplugged: Time on battery: 1d 0h 47m 44s 996ms (96,6%) realtime, 4h 18m 38s 194ms (16,8%) uptime Total run time: 1d 1h 40m 4s 510ms realtime, 5h 10m 57s 708ms uptime, Screen on: 27m 18s 6
Statistics since last unplugged:
Time on battery: 1d 0h 47m 44s 996ms (96,6%) realtime, 4h 18m 38s 194ms (16,8%) uptime
Total run time: 1d 1h 40m 4s 510ms realtime, 5h 10m 57s 708ms uptime,
Screen on: 27m 18s 641ms (1,8%), Input events: 0, Active phone call: 0ms (0,0%)
[...]
All partial wake locks:
Wake lock 1000 PowerManagerEx.WifiDisable: 3h 16m 49s 619ms (1190 times) realtime
[...]
我的设备运行在Android 4.4(Kitkat)上。我试图通过每15分钟打开一次wifi并持续几秒钟,然后使用setWifiEnabled(false)
再次将其关闭,从而最大限度地减少电池使用量。我的应用程序每分钟会唤醒一次,更新屏幕并再次发送设备进入睡眠状态,这似乎工作正常(24小时内屏幕打开27分钟)。但是,如果PowerManagerEx每分钟让系统保持10秒的清醒状态,那么这并没有帮助。(在有人指出最短唤醒时间为10秒之前:在我的系统上没有。我修补了PowerManagerService)。为什么会这样
我反编译了PowerManagerEx,发现了以下代码:
public PowerManagerEx(Context context) {
this.mContext = context;
this.mInitComplete = DEBUG;
this.mPmExHandlerThread = new HandlerThread("PowerManagerService.PowerManagerEx") {
/* access modifiers changed from: protected */
public void onLooperPrepared() {
PowerManagerEx.this.mPmExHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
PowerManagerEx.this.setWakeLock(PowerManagerEx.this.mWakeLockWifiEnable);
PowerManagerEx.this.WiFiLoad();
PowerManagerEx.this.releaseWakeLock(PowerManagerEx.this.mWakeLockWifiEnable);
return;
case 2:
PowerManagerEx.this.setWakeLock(PowerManagerEx.this.mWakeLockWifiDisable);
if (!PowerManagerEx.this.WiFiIsEnabled()) {
PowerManagerEx.this.releaseWakeLock(PowerManagerEx.this.mWakeLockWifiDisable);
return;
} else if (PowerManagerEx.this.getTotalWakeLock() == 1 || PowerManagerEx.this.getTotalWakeLock() == PowerManagerEx.ANDROID_DRAW_AND_POST) {
PowerManagerEx.this.WiFiUnload();
PowerManagerEx.this.releaseWakeLock(PowerManagerEx.this.mWakeLockWifiDisable);
return;
} else {
PowerManagerEx.this.mPmExHandler.sendEmptyMessageDelayed(2, 3000);
return;
}
[...]
由于Wifi已经关闭,它应该只释放唤醒锁,对吗?但很明显这需要10秒,我不知道为什么