国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

如何通過Battery Historian分析Android APP耗電情況

瀏覽:52日期:2022-09-17 16:40:42
目錄一、電量統(tǒng)計(jì)模塊概述1.1、軟件耗電統(tǒng)計(jì)二、battery-historian2.1、概述2.2、獲取bugreports2.3、數(shù)據(jù)分析2.4、bugreport 文件分析一、電量統(tǒng)計(jì)模塊概述

耗電信息在設(shè)置 -> 電量中能夠非常直觀的看到。注意,Android 所有功耗統(tǒng)計(jì)都是通過代碼估算,沒有集成電路參與匯報(bào)。準(zhǔn)確度取決于廠商 ROM 所提供的power_profile.xml文件。由于不同廠商power_profile.xml準(zhǔn)確度及源碼有差異,因此不同手機(jī)、不同版本的數(shù)據(jù)可能有較大差異。

power_profile.xml直接影響統(tǒng)計(jì)的準(zhǔn)確度,并且此文件無法通過應(yīng)用修改。再次強(qiáng)調(diào),Android 耗電估算沒有硬件的參與,全靠代碼估算。

power_profile.xml文件位于源碼下的/framework/base/core/res/res/xml/power_profile.xml,部分內(nèi)容展示如下:

<item name='radio.scanning'>0.1</item> <!-- cellular radio scanning for signal, ~10mA --> <item name='gps.on'>0.1</item> <!-- ~50mA --> <!-- Current consumed by the radio at different signal strengths, when paging --> <array name='radio.on'> <!-- Strength 0 to BINS-1 --> <value>0.2</value> <!-- ~2mA --> <value>0.1</value> <!-- ~1mA --> </array> </array> <!-- Different CPU speeds as reported in /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state --> <array name='cpu.speeds'> <value>400000</value> <!-- 400 MHz CPU speed --> </array> <!-- Current when CPU is idle --> <item name='cpu.idle'>0.1</item> <!-- Current at each CPU speed, as per ’cpu.speeds’ --> <array name='cpu.active'> <value>0.1</value> <!-- ~100mA --> </array> <array name='wifi.batchedscan'> <!-- mA --> <value>.0002</value> <!-- 1-8/hr --> <value>.002</value> <!-- 9-64/hr --> <value>.02</value> <!-- 65-512/hr --> <value>.2</value> <!-- 513-4,096/hr --> <value>2</value> <!-- 4097-/hr --> </array>

這就是在硬件層面統(tǒng)計(jì)時(shí),直接參與運(yùn)算的參數(shù)。無論是軟件耗電統(tǒng)計(jì)還是硬件耗電統(tǒng)計(jì),都通過BatteryStatsHelper來進(jìn)行匯總。BatteryStatsHelper位于/framework/base/core/java/com/andorid/internal/os/BatteryStatsHelper.java下。

1.1、軟件耗電統(tǒng)計(jì)

在BatteryStatsHelper.java中,有這么一個(gè)方法:

private void processAppUsage(SparseArray<UserHandle> asUsers) { final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null); mStatsPeriod = mTypeBatteryRealtime; BatterySipper osSipper = null; final SparseArray<? extends Uid> uidStats = mStats.getUidStats(); final int NU = uidStats.size(); for (int iu = 0; iu < NU; iu++) {final Uid u = uidStats.valueAt(iu);final BatterySipper app = new BatterySipper(BatterySipper.DrainType.APP, u, 0);mCpuPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mWakelockPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mMobileRadioPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mWifiPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mBluetoothPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mSensorPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mCameraPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);mFlashlightPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);final double totalPower = app.sumPower();if (DEBUG && totalPower != 0) { Log.d(TAG, String.format('UID %d: total power=%s', u.getUid(), makemAh(totalPower)));} } ... // code}

processAppUsage()方法中,一個(gè)應(yīng)用的總功耗在這里體現(xiàn)出來了:

cpu Wakelock(保持喚醒鎖) 無線電(2G/3G/4G) WIFI 藍(lán)牙 傳感器 相機(jī) 閃光燈

這些數(shù)據(jù),將決定著你的應(yīng)用在耗電排行榜中的位置,以及是否給予用戶警告高耗電。這些警告對于應(yīng)用來說可能是致命的,用戶可能因此而卸載應(yīng)用。

應(yīng)用總功耗是上述八個(gè)統(tǒng)計(jì)值的和。這八個(gè)統(tǒng)計(jì)器同繼承自PowerCalculator.java

具體來說,這八個(gè)耗電計(jì)算器的算法分別如下:

如何通過Battery Historian分析Android APP耗電情況

耗電統(tǒng)計(jì)概述就如上所述。總的來說并不復(fù)雜,通過聚合八種不同方式的消耗,來得出總的耗電量,并給予用戶展示。

二、battery-historian2.1、概述

Battery Historian ,是谷歌出品的耗電分析器。通過 Battery Historian,可將導(dǎo)出的 bugreport 文件可視化。在第一代的 Battery Historian 中,google 使用了 python 作為數(shù)據(jù)解析工具。拿到 bugreport 文件后,通過終端執(zhí)行 python 來生成可視化的 html 文件。這種方法使用起來較為麻煩,而且無法部署到服務(wù)器。因此在第二代 Battery Historian,google 選擇了使用 docker 容器。現(xiàn)在完全不推薦使用第一代 Battery Historian,已經(jīng)許久沒有維護(hù)了,而且功能過于簡陋。

需要注意的是 battery-historian 在使用時(shí)候不能在充電,同時(shí)確保設(shè)備運(yùn)行的 Android 版本是 5.0 及以上。

通過上面的描述,對battery-historian 的功能有個(gè)大概的了解,下面進(jìn)入到實(shí)戰(zhàn)。

2.2、獲取bugreports

battery-historian 雖然功能強(qiáng)大,但是也是需要先提供數(shù)據(jù)的,其數(shù)據(jù)的獲取需要我們手動(dòng)操作。下面介紹如何獲取bugreports。

1.電腦連接上手機(jī),斷開adb服務(wù),adb作為一種連接的方式,有可能被其他的程序占用,所以我們做電量記錄時(shí)要避免打開很多可能沖突的東西

adb kill-server

2. 重啟adb服務(wù)

adb devices || adb start-server

3. Android也不記錄特定于應(yīng)用程序的用戶空間wakelock轉(zhuǎn)換的時(shí)間戳。如果您希望Historian在時(shí)間線上顯示關(guān)于每個(gè)單獨(dú)喚醒鎖的詳細(xì)信息,則應(yīng)在開始實(shí)驗(yàn)之前使用以下命令啟用完整喚醒鎖報(bào)告:

adb shell dumpsys batterystats --enable full-wake-history

4. 采集報(bào)告前將battery統(tǒng)計(jì)狀態(tài)重置,重置命令結(jié)束后斷開usb,測試結(jié)束后用獲取報(bào)告命令導(dǎo)出統(tǒng)計(jì)文件包

adb shell dumpsys batterystats --reset

5. 導(dǎo)出電量,對于 7.0 系統(tǒng)以上的設(shè)備運(yùn)用:

adb bugreport bugreport.zip

adb bugreport > $HOME/Documents/bugreport.zip // 指定到對應(yīng)目錄下,具體分機(jī)型,可能會(huì)有些不一樣

6.0 或更低版本:

adb bugreport > bugreport.txt

2.3、數(shù)據(jù)分析

獲取到數(shù)據(jù)后,接下去就是對數(shù)據(jù)進(jìn)行分析了。

如圖所示Battery Historian圖表的一個(gè)例子:

如何通過Battery Historian分析Android APP耗電情況

其中標(biāo)號的意義是:

標(biāo)號1:從下拉列表中添加其他指標(biāo); 標(biāo)號2:將鼠標(biāo)懸停在信息圖標(biāo)上可以查看有關(guān)每個(gè)指標(biāo)的詳細(xì)信息,包括圖表中使用的不同顏色代表意義的介紹; 標(biāo)號3:將鼠標(biāo)懸停在某個(gè)條目上可以查看該指標(biāo)的更多詳細(xì)信息,以及時(shí)間線上特定點(diǎn)的耗電量信息;

這是整個(gè)手機(jī)狀態(tài)圖,包括手機(jī)電量,CPU 使用時(shí)長,wifi 信號的強(qiáng)度,手機(jī)溫度變化等等,都在上面詳細(xì)的用圖表展示出來了。

Battery Historian除了能夠提供宏觀的系統(tǒng)層面的信息,還能夠提供針對指定App的可視化數(shù)據(jù)和表格信息,這表格主要信息包括:

Device estimated power use等基本信息 Networks Information:app網(wǎng)絡(luò)信息 Wakelocks:喚醒鎖信息,一般和業(yè)務(wù)強(qiáng)相關(guān) Services:服務(wù)信息,查看App開啟的services信息 Process info:進(jìn)程信息

Battery Historian圖表下為數(shù)據(jù)分析,包括三個(gè)Tab,如下圖所示,可以查看App更多信息:

如何通過Battery Historian分析Android APP耗電情況

其中,標(biāo)號所代表的意義是:

標(biāo)號1:System Stats 分組包含系統(tǒng)級別的數(shù)據(jù),比如屏幕亮度等。這一欄顯示了系統(tǒng)發(fā)生的總體情況,可以用來測試是否存在外部影響事件; 標(biāo)號2:App Stats分組包含針對指定APP的詳細(xì)信息; 標(biāo)號3:可以根據(jù)不同的分類標(biāo)準(zhǔn)對APP進(jìn)行排序; 標(biāo)號4:在下拉列表中選擇指定的APP后可在App Stats中查看具體信息,App Stats所展示的都是所選定App產(chǎn)生的數(shù)據(jù),不會(huì)受到外部因素的影響;

下面看看具體某個(gè)手機(jī)的數(shù)據(jù),比如百度APP應(yīng)用的數(shù)據(jù),在右邊選擇對應(yīng)的 APP,左邊就會(huì)展示當(dāng)前 APP 的電量,網(wǎng)絡(luò)等情況。

如何通過Battery Historian分析Android APP耗電情況

2.4、bugreport 文件分析

前面是通過Battery History 對bugreport 的文件進(jìn)行了分析,那如果我們想自己分析呢?因此,在這里有必要了解下bugreport 的文件內(nèi)容。

電量統(tǒng)計(jì)信息起始,包含 reset 時(shí)間,進(jìn)程信息等

如何通過Battery Historian分析Android APP耗電情況

下面是距離上次充電后的數(shù)據(jù)統(tǒng)計(jì):

如何通過Battery Historian分析Android APP耗電情況

每個(gè) APP 電量使用情況,通過 Uid 來標(biāo)識APP

如何通過Battery Historian分析Android APP耗電情況

可以通過關(guān)鍵字下面的關(guān)鍵字來尋找相關(guān)信息。

DUMP OF SERVICE 

通過該關(guān)鍵字可以查到 wifi, 網(wǎng)絡(luò), activities 等等的信息。

以上就是如何通過Battery Historian分析Android APP耗電情況的詳細(xì)內(nèi)容,更多關(guān)于Battery Historian Android APP耗電情況的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 欧美a在线播放 | 亚洲精品一区二区在线观看 | 久久国产亚洲 | 国产精品一级视频 | 欧美特欧美特级一片 | 特级欧美午夜aa毛片 | 中文字幕一二区 | 亚洲欧美激情视频 | 男人的天堂精品国产一区 | 草草视频在线免费观看 | 成人久久网 | 国产成人综合亚洲一区 | 国产一区三区二区中文在线 | 欧美一区二区三区高清视频 | 老外黑人欧美一级毛片 | 长腿嫩模打开双腿呻吟 | 国产网站黄色 | 亚洲日产2021三区 | 真人毛片免费全部播放完整 | 久久精品99毛片免费 | 乱子伦一级在线现看 | 国产真实乱系列2孕妇 | 草草影院永久在线观看 | 欧美色性 | 亚洲精品视频免费看 | 日韩精品在线一区二区 | 免费一级毛片在线播放不收费 | 亚洲欧美国产视频 | 欧美成人精品动漫在线专区 | 国产成人久久精品麻豆二区 | 国产成人无精品久久久 | 91久久国产 | 久久精品免视看国产明星 | 在线观看亚洲精品专区 | 欧美成人影院 在线播放 | 亚洲精品天堂一区在线观看 | 最新毛片久热97免费精品视频 | 欧美成人免费一区在线播放 | 久久国产视屏 | 久久国产一片免费观看 | 美女视频黄色在线观看 |