android 7.0 电量使用情况分析

主要概括为如下四点

  1. 单项耗电百分比=(单项耗电量/总共耗电量)*总计耗电百分比
  2. 小于0.5%的项不显示在列表中,采用四舍五入显示百分比
  3. 当处于充电状态满足以下四个条件时清空电量使用记录:
    (1)没有自动重置且之前充满过电
    (2)当前电量大于90%
    (3)上次掉电时(充电前)的电量小于20%,当前电量大于80%
    (4)总共耗电 大于200%,且电池记录缓存已满( 256*1024; // 256KB)
  4. 当电池充满电不再充电时,停止记录电量使用记录,并在下一次拔出USB/电源时清空记录

代码分析

Settings模块 PowerUseageSummary.java
refreshStats()方法:
//某一项(屏幕\WIFI\BT..)耗电量的百分比计算公式   = (该项耗电量(mah)/总共耗电量(mah)) * 总计百分比
final double percentOfTotal =  ((sipper.totalPowerMah / totalPower) * dischargeAmount);
...

if (((int) (percentOfTotal + .5)) < 1) {  // 小于0.5%的耗电项不显示
        continue;
}
// 将该百分比设置到视图中
pref.setPercent(percentOfMax, percentOfTotal);

// setPercent 实现如下:
mProgress = Utils.formatPercentage((int) (percentOfTotal + 0.5));//四舍五入
清空电量使用记录

frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java

1. setOnBatteryLocked 方法 (该方法只有在充电状态变化时调用)
if (onBattery) { //在充电状态进行如下判断
    // We will reset our status if we are unplugging after the
    // battery was last full, or the level is at 100, or
    // we have gone through a significant charge (from a very low
    // level to a now very high level).
    boolean reset = false;
    // 满足如下四个条件则清空电量使用记录
    if (!mNoAutoReset && (oldStatus == BatteryManager.BATTERY_STATUS_FULL  //没有自动重置且之前充满过电
         || level >= 90  //当前电量大于90%
         || (mDischargeCurrentLevel < 20 && level >= 80) //上次掉电时(充电前)的电量小于20%,当前电量大于80%
          || (getHighDischargeAmountSinceCharge() >= 200 && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER))) { // 总共耗电 大于200,且电池记录缓存已满( 256*1024; // 256KB)
        ...
        reset = true;
        ...
    }
    ...
    if (reset) {
        mRecordingHistory = true;
        startRecordingHistory(mSecRealtime, mSecUptime, reset);//重置电量使用记录,开始新的记录
    }
}

2.  setBatteryStateLocked 方法
...
// 当电池充满电不再充电时,停止记录电量使用记录,并在下一次拔出USB/电源时清空记录
if (!onBattery && status == BatteryManager.BATTERY_STATUS_FULL) {
    // We don't record history while we are plugged in and fully charged.
    // The next time we are unplugged, history will be cleared.
    mRecordingHistory = DEBUG;// DEBUG = false
}

你可能感兴趣的:(android 7.0 电量使用情况分析)