SystemUI中的PowerUI简析

PowerUI

powerUI是SystemUI显示电池相关信息的模块,包括低电量提醒,危急电量关机提醒,高温关机提醒,省电模式等的功能。
在powerUI.java 中主要是两个函数start()和onReveice()

启动流程

SystemUI启动时会加载众多功能模块,其中就包含着PowerUI,会直接调用\

PowerUI.start()

start() 函数是在PowerUI 中最先触发的方法。在方法内进行了一些赋值操作,及注册对电量变化和屏幕开闭状态的广播监听
1)实例化PowerManager,因为是处理和Power相关的业务,必须实例化PowerManager.

2)初始化关屏时间,关屏时间会持续刷新。

3)实例化PowerNotificationWarnings,Power相关的事件会通过Notification方式进行处理。

4)监控电池电量,在电量不足是给出警告和提示。

5)更新电池电量等级。

public void start() {
   
        //获取PowerManager  用于获取电池的相关信息
        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        //获取自启动以来的毫秒数
        mScreenOffTime = mPowerManager.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
        mWarnings = Dependency.get(WarningsUI.class);
        //和混合通知相关,相关功能平台默认是关闭的,我们暂时也就不关注了
        mEnhancedEstimates = Dependency.get(EnhancedEstimates.class);
        mLastConfiguration.setTo(mContext.getResources().getConfiguration());
        // 监测低电量阀值的改变
        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();

        //检查我们是否需要让用户知道手机之前因温度过高而关闭
        showWarnOnThermalShutdown();

        // Register an observer to configure mEnableSkinTemperatureWarning and perform the
        // registration of skin thermal event listener upon Settings change.
        //注册观察者以配置 mEnableSkinTemperatureWarning 并在设置更改时执行皮肤热事件侦听器的注册。
        resolver.registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.SHOW_TEMPERATURE_WARNING),
                false /*notifyForDescendants*/,
                new ContentObserver(mHandler) {
   
                    @Override
                    public void onChange(boolean selfChange) {
   
                        doSkinThermalEventListenerRegistration();
                    }
                });
        // Register an observer to configure mEnableUsbTemperatureAlarm and perform the
        // registration of usb thermal event listener upon Settings change.
        //注册观察者以配置 mEnableUsbTemperatureAlarm 并在设置更改时执行 USB 热事件侦听器的注册。
        resolver.registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.SHOW_USB_TEMPERATURE_ALARM),
                false /*notifyForDescendants*/,
                new ContentObserver(mHandler) {
   
                    @Override
                    public void onChange(boolean selfChange) {
   
                        doUsbThermalEventListenerRegistration();
                    }
                });
        // 初始化温度阀值
        initThermalEventListeners();
        mCommandQueue.addCallback(this);
    }

电池电量有三个关键值定义如下(frameworks\base\core\res\res\valuesconfig.xml):

<integer name="config_criticalBatteryWarningLevel">5</integer>
<integer name="config_lowBatteryWarningLevel">15</integer>
<integer name="config_lowBatteryCloseWarningBump">5</integer>

低电量警告

updateBatteryWarningLevels

void updateBatteryWarningLevels() {
   
        //获取系统配置的危急电量,默认值是5
        int critLevel = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_criticalBatteryWarningLevel);
        // 获取系统配置的低电量值,默认:15
        int warnLevel = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_lowBatteryWarningLevel);

        if (warnLevel < critLevel) {
   
            warnLevel = critLevel;
        }

        mLowBatteryReminderLevels[0] = warnLevel;
        mLowBatteryReminderLevels[1] = critLevel;
        // 获取系统配置的关闭低电量警告状态的电量值,默认:20(15+5)
        mLowBatteryAlertCloseL
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值