android 7.0 電量使用情況分析

主要概括為如下四點(diǎn)

  1. 單項(xiàng)耗電百分比=(單項(xiàng)耗電量/總共耗電量)*總計(jì)耗電百分比
  2. 小于0.5%的項(xiàng)不顯示在列表中,采用四舍五入顯示百分比
  3. 當(dāng)處于充電狀態(tài)滿足以下四個(gè)條件時(shí)清空電量使用記錄:
    (1)沒(méi)有自動(dòng)重置且之前充滿過(guò)電
    (2)當(dāng)前電量大于90%
    (3)上次掉電時(shí)(充電前)的電量小于20%,當(dāng)前電量大于80%
    (4)總共耗電 大于200%,且電池記錄緩存已滿( 256*1024; // 256KB)
  4. 當(dāng)電池充滿電不再充電時(shí),停止記錄電量使用記錄,并在下一次拔出USB/電源時(shí)清空記錄

代碼分析

Settings模塊 PowerUseageSummary.java
refreshStats()方法:
//某一項(xiàng)(屏幕\WIFI\BT..)耗電量的百分比計(jì)算公式   = (該項(xiàng)耗電量(mah)/總共耗電量(mah)) * 總計(jì)百分比
final double percentOfTotal =  ((sipper.totalPowerMah / totalPower) * dischargeAmount);
...

if (((int) (percentOfTotal + .5)) < 1) {  // 小于0.5%的耗電項(xiàng)不顯示
        continue;
}
// 將該百分比設(shè)置到視圖中
pref.setPercent(percentOfMax, percentOfTotal);

// setPercent 實(shí)現(xiàn)如下:
mProgress = Utils.formatPercentage((int) (percentOfTotal + 0.5));//四舍五入
清空電量使用記錄

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

1. setOnBatteryLocked 方法 (該方法只有在充電狀態(tài)變化時(shí)調(diào)用)
if (onBattery) { //在充電狀態(tài)進(jìn)行如下判斷
    // 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;
    // 滿足如下四個(gè)條件則清空電量使用記錄
    if (!mNoAutoReset && (oldStatus == BatteryManager.BATTERY_STATUS_FULL  //沒(méi)有自動(dòng)重置且之前充滿過(guò)電
         || level >= 90  //當(dāng)前電量大于90%
         || (mDischargeCurrentLevel < 20 && level >= 80) //上次掉電時(shí)(充電前)的電量小于20%,當(dāng)前電量大于80%
          || (getHighDischargeAmountSinceCharge() >= 200 && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER))) { // 總共耗電 大于200,且電池記錄緩存已滿( 256*1024; // 256KB)
        ...
        reset = true;
        ...
    }
    ...
    if (reset) {
        mRecordingHistory = true;
        startRecordingHistory(mSecRealtime, mSecUptime, reset);//重置電量使用記錄,開(kāi)始新的記錄
    }
}

2.  setBatteryStateLocked 方法
...
// 當(dāng)電池充滿電不再充電時(shí),停止記錄電量使用記錄,并在下一次拔出USB/電源時(shí)清空記錄
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
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容