android低电量模式吗,Android P 省电模式(LowPowerMode)(二) ------ 省电行为

在上篇文章Android P 省电模式(LowPowerMode)(一) ------ 省电模式手动开启流程 中最后分析到,开启省电模式后,会在 BatterySaverController 中回调所有注册的 LowPowerModeListener(onLowPowerModeChanged)和 plugin(onBatterySaverChanged),并发出广播。 我们看一下 系统做了哪些事情来实现省电。

主要有 振动,亮度,网络访问,GPS位置信息,动画,语音识别几个方面。

1. 限制振动 VibratorService.java

VibratorService.java中回调:

public void systemReady() {

Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorService#systemReady");

try {

..........................

mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);

mPowerManagerInternal.registerLowPowerModeObserver(

new PowerManagerInternal.LowPowerModeListener() {

@Override

public int getServiceType() {

return ServiceType.VIBRATION;

}

@Override

public void onLowPowerModeChanged(PowerSaveState result) {

updateVibrators();//更改低电量状态

}

});

..........................

}

private void updateVibrators() {

synchronized (mLock) {

boolean devicesUpdated = updateInputDeviceVibratorsLocked();

boolean lowPowerModeUpdated = updateLowPowerModeLocked();//更改低电量状态

updateVibrationIntensityLocked();

if (devicesUpdated || lowPowerModeUpdated) {

// If the state changes out from under us then just reset.

doCancelVibrateLocked();

}

}

}

private boolean updateLowPowerModeLocked() {

boolean lowPowerMode = mPowerManagerInternal

.getLowPowerState(ServiceType.VIBRATION).batterySaverEnabled;//看看这个值怎么拿到的

if (lowPowerMode != mLowPowerMode) {

mLowPowerMode = lowPowerMode;//mLowPowerMode这个变量判断要不要震动会用到

return true;

}

return false;

}

frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java :

@Override

public PowerSaveState getLowPowerState(@ServiceType int serviceType) {

return mBatterySaverPolicy.getBatterySaverPolicy(serviceType,

mBatterySaverController.isEnabled());//这个方法根据传入的serviceType 决定要不要对省电模式做出反应,很关键的方法

}

frameworks\base\services\core\java\com\android\server\power\BatterySaverPolicy.java :

/**

* Get the {@link PowerSaveState} based on {@paramref type} and {@paramref realMode}.

* The result will have {@link PowerSaveState#batterySaverEnabled} and some other

* parameters when necessary.

*

* @param type type of the service, one of {@link ServiceType}

* @param realMode whether the battery saver is on by default

* @return State data that con

你可能感兴趣的:(android低电量模式吗)