PowerUI在SystemUI里的实现比较简单,PowerUI主要处理和Power相关的事件,比如省电模式切换,电池电量变化和开关屏事件等。
PowerUI的启动流程与SystemBars,Recents一样,因为他们都是SystemUI的子类,具体可以看前面的介绍。
public void start() {
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mScreenOffTime = mPowerManager.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
mWarnings = new PowerNotificationWarnings(mContext, getComponent(PhoneStatusBar.class));
ContentObserver obs = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
updateBatteryWarningLevels();
}
};
final ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
false, obs, UserHandle.USER_ALL);
updateBatteryWarningLevels();
mReceiver.init();
}
在PowerUI启动时,会调用start函数,start函数主要实现:
1)实例化PowerManager,因为是处理和Power相关的业务,必须实例化PowerManager.
2)初始化关屏时间,关屏时间会持续刷新。
3)实例化PowerNotificationWarnings,Power相关的事件会通过Notification方式进行处理。
4)监控电池电量,在电量不足是给出警告和提示。
5)更新电池电量等级。
void updateBatteryWarningLevels() {
int critLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
final ContentResolver resolver = mContext.getContentResolver();
int defWarnLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
int warnLevel = Settings.Global.getInt(resolver,
Set