android 7.0電力使用状況分析

2255 ワード

主に以下の4点に要約する
  • 単一消費電力率=(単一消費電力/合計消費電力)*合計消費電力率
  • 0.5%未満の項目はリストに表示されず、四捨五入表示率
  • を用いる.
  • 充電状態で以下の4つの条件を満たす場合、使用電力記録をクリアする:(1)自動リセットされず、以前に過電力が充満していた(2)現在の電力量が90%を超えた(3)前回の停電時(充電前)の電力量が20%未満で、現在の電力量が80%を超えた(4)合計消費電力が200%を超え、バッテリ記録キャッシュが満タン(256*1024;//256 KB)
  • .
  • 電池が満充電になって充電がなくなると、記録電力使用記録を停止する、次に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
    }