电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

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

power_profile.xml直接影響統計的準確度,并且此文件無法通過應用修改。再次強調,Android 耗電估算沒有硬件的參與,全靠代碼估算。

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

<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>

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

1.1、軟件耗電統計

在BatteryStatsHelper.java中,有這么一個方法:

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()方法中,一個應用的總功耗在這里體現出來了:

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

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

應用總功耗是上述八個統計值的和。這八個統計器同繼承自PowerCalculator.java

具體來說,這八個耗電計算器的算法分別如下:

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

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

二、battery-historian2.1、概述

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

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

通過上面的描述,對battery-historian 的功能有個大概的了解,下面進入到實戰。

2.2、獲取bugreports

battery-historian 雖然功能強大,但是也是需要先提供數據的,其數據的獲取需要我們手動操作。下面介紹如何獲取bugreports。

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

adb kill-server

2. 重啟adb服務

adb devices || adb start-server

3. Android也不記錄特定于應用程序的用戶空間wakelock轉換的時間戳。如果您希望Historian在時間線上顯示關于每個單獨喚醒鎖的詳細信息,則應在開始實驗之前使用以下命令啟用完整喚醒鎖報告:

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

4. 采集報告前將battery統計狀態重置,重置命令結束后斷開usb,測試結束后用獲取報告命令導出統計文件包

adb shell dumpsys batterystats --reset

5. 導出電量,對于 7.0 系統以上的設備運用:

adb bugreport bugreport.zip

adb bugreport > $HOME/Documents/bugreport.zip // 指定到對應目錄下,具體分機型,可能會有些不一樣

6.0 或更低版本:

adb bugreport > bugreport.txt

2.3、數據分析

獲取到數據后,接下去就是對數據進行分析了。

如圖所示Battery Historian圖表的一個例子:

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

其中標號的意義是:

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

這是整個手機狀態圖,包括手機電量,CPU 使用時長,wifi 信號的強度,手機溫度變化等等,都在上面詳細的用圖表展示出來了。

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

Device estimated power use等基本信息 Networks Information:app網絡信息 Wakelocks:喚醒鎖信息,一般和業務強相關 Services:服務信息,查看App開啟的services信息 Process info:進程信息

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

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

其中,標號所代表的意義是:

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

下面看看具體某個手機的數據,比如百度APP應用的數據,在右邊選擇對應的 APP,左邊就會展示當前 APP 的電量,網絡等情況。

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

2.4、bugreport 文件分析

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

電量統計信息起始,包含 reset 時間,進程信息等

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

下面是距離上次充電后的數據統計:

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

每個 APP 電量使用情況,通過 Uid 來標識APP

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

可以通過關鍵字下面的關鍵字來尋找相關信息。

DUMP OF SERVICE 

通過該關鍵字可以查到 wifi, 網絡, activities 等等的信息。

以上就是如何通過Battery Historian分析Android APP耗電情況的詳細內容,更多關于Battery Historian Android APP耗電情況的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 领先的大模型技术与应用公司-中关村科金 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 环球电气之家-中国专业电气电子产品行业服务网站! | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 杭州门窗厂家_阳光房_包阳台安装电话-杭州窗猫铝合金门窗 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 |