Battery Reset的4大原因

Battery Stats Reset的4大原因:

一、读电池文件异常执行reset[BatteryStatsImpl.RESET_REASON_CORRUPT_FILE]

超过200个持锁;

超过200个syn或job;

超过1000个sensor;

超过1000个processes;

超过1000个应用;

超过1000个alarm

超过10000个service

二、命令行执行reset[BatteryStatsImpl.RESET_REASON_ADB_COMMAND]

adb dumpsys batterystats --reset

三、充电执行reset[BatteryStatsImpl.RESET_REASON_FULL_CHARGE]

充满电状态

电量百分比90%以上,

电量百分比从20%以下到80%以上

充电期间累计总充电量百分比>200%

四、开机检测到power buckets改变执行reset[BatteryStatsImpl.RESET_REASON_MEASURED_ENERGY_BUCKETS_CHANGE]

每次开机检测当前机型所支持的POWER_BUCKET_的类别和数量是否发生改变,若和上次开机不同,则表示可能存在兼容性差异(MeasuredEnergyStatsConfig.isCompatible(config)),需要reset 可能场景举例:换电池或刷其他power_profile的版本

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

@IntDef(prefix = {"POWER_BUCKET_"}, value = {

POWER_BUCKET_UNKNOWN,

POWER_BUCKET_SCREEN_ON,

POWER_BUCKET_SCREEN_DOZE,

POWER_BUCKET_SCREEN_OTHER,

POWER_BUCKET_CPU,

POWER_BUCKET_WIFI,

POWER_BUCKET_BLUETOOTH,

POWER_BUCKET_GNSS,

POWER_BUCKET_MOBILE_RADIO,

})

private static final int[] SUPPORTED_PER_PROCESS_STATE_STANDARD_ENERGY_BUCKETS = {

MeasuredEnergyStats.POWER_BUCKET_CPU, // CPU 电量消耗桶

MeasuredEnergyStats.POWER_BUCKET_MOBILE_RADIO,// Modem 电量消耗桶

MeasuredEnergyStats.POWER_BUCKET_WIFI,// WIFI 电量消耗桶

MeasuredEnergyStats.POWER_BUCKET_BLUETOOTH,// 蓝牙 电量消耗桶

};

本次开机检测到与上一次开机CPU、Modem、WIFI、蓝牙的电量消耗桶发生变化了,之前的数据可能不可靠,需要进行重置

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

200 public static final int RESET_REASON_CORRUPT_FILE = 1;

201 public static final int RESET_REASON_ADB_COMMAND = 2;

202 public static final int RESET_REASON_FULL_CHARGE = 3;

203 public static final int RESET_REASON_MEASURED_ENERGY_BUCKETS_CHANGE = 4;

15536 if (!mNoAutoReset && mSystemReady

15537 && (oldStatus == BatteryManager.BATTERY_STATUS_FULL

15538 || level >= 90

15539 || (mDischargeCurrentLevel < 20 && level >= 80)

15540 || getHighDischargeAmountSinceCharge() >= 200)) {

15541 Slog.i(TAG, "Resetting battery stats: level=" + level + " status=" + oldStatus

15542 + " dischargeLevel=" + mDischargeCurrentLevel

15543 + " lowAmount=" + getLowDischargeAmountSinceCharge()

15544 + " highAmount=" + getHighDischargeAmountSinceCharge());

267 private static final int[] SUPPORTED_PER_PROCESS_STATE_STANDARD_ENERGY_BUCKETS = {

268 MeasuredEnergyStats.POWER_BUCKET_CPU,

269 MeasuredEnergyStats.POWER_BUCKET_MOBILE_RADIO,

270 MeasuredEnergyStats.POWER_BUCKET_WIFI,

271 MeasuredEnergyStats.POWER_BUCKET_BLUETOOTH,

272 };

109 /**

110 * Returns true if the supplied Config is compatible with this one and therefore

111 * data collected with one of them will work with the other.

112 */

113 public boolean isCompatible(Config other) {

114 return Arrays.equals(mSupportedStandardBuckets, other.mSupportedStandardBuckets)

115 && Arrays.equals(mCustomBucketNames, other.mCustomBucketNames)

116 && Arrays.equals(mSupportedMultiStateBuckets,

117 other.mSupportedMultiStateBuckets)

118 && Arrays.equals(mStateNames, other.mStateNames);

119 }

logcat|grep -Ei "isCompatible|initEnergyConsumerStatsLocked"