BatteryService是在systemServer启动核心服务的时候启动的。
同样我们按照PMS启动的流程来分析BatteryService的启动流程。
1.BatteryService的构造方法
BatteryService的构造方法比较简单,只是从资源中获取一些预定的值
电量统计服务
mBatteryStats = BatteryStatsService.getService();
//电池危急电量
mCriticalBatteryLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
//电池低电量模式警告电量
mLowBatteryWarningLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
//关闭低电量模式警告电量
mLowBatteryCloseWarningLevel = mLowBatteryWarningLevel + mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryCloseWarningBump);
//电池关机温度
mShutdownBatteryTemperature = mContext.getResources().getInteger(
com.android.internal.R.integer.config_shutdownBatteryTemperature);
2.BatteryService onStart方法
onStart方法中 将BatteryService服务注册到ServiceManager,注册了底层电量变换的回调方法,最终调用BatteryService的update方法更新电池信息
public void onStart() {
IBinder b = ServiceManager.getService("batteryproperties");
final IBatteryPropertiesRegistrar batteryPropertiesRegistrar =
IBatteryPropertiesRegistrar.Stub.asInterface(b);
try {
//注册底层电量变化的监听,调用update更新电池信息
batteryPropertiesRegistrar.registerListener(new BatteryListener());
……
//注册BatteryService服务
publishBinderService("battery", new BinderService());
publishLocalService(BatteryManagerInternal.class, new LocalService());
}
3.onBootPhase方法
当ActivityManager启动完成的时候,回调onBootPhase方法
onBootPhase方法很简单,就是注册了一个关于ContentObserver
来监测设置中关于低电量警告的电量值是否改变
如果该电量值发生变化,回调updateBatteryWarningLevelLocked()方法。
private void updateBatteryWarningLevelLocked() {
final ContentResolver resolver = mContext.getContentResolver();
//获取默认的警告电量值
int defWarnLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
//获取自己设置的警告电量值
mLowBatteryWarningLevel =