Android App 耗电量统计

前言

    在Android统计App耗电量比较麻烦,直至Android 4.4,它仍没公开“电量统计”API或文档……额,是的,仅没有公开,并不是没有。平时在手机“设置- 电量”看到的数据

    Image

    就是系统调用内部API的统计结果。

 

基础概念

    1. 手机由众多“部件”组成,所谓“部件”是指:CPU,WIFI,GPS....所以,Android App消耗总电量为 App运行过程中,涉及各部件的消耗电量的总和。
    2. 假设运行App导致CPU运行,时间:t,CPU单位时间消耗电量:w,则App的CPU耗电量为:W = w*t,而有物理公式 W = U*I*t(U:电压值,I:电流值),在手机中,一般U恒定不变,所以,可以单独通过 Q(电容量,单位: mAh)= I * t 表示电量
 
系统源码分析

    核心源码/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java

    核心类

        - BatteryStatsImpl:提供App各部件运行时间。

        - PowerProfile:提供部件电流数值。

    问题

        - Android怎样存储与读取App耗电量信息(即:BatteryStatsImpl数据怎么来的?)

        - Android怎么存储部件电流数值(即:PowerProfile数据怎么来的?)

        - Android具体耗电量计算方法

 

    1. Android怎样存储与读取App耗电量信息

        (1)先看下PowerUsageSummary.java如何获取BatteryStatsImpl?

         Image(1)

        Image(2)

        Image(3)

        可见 BatteryStatsImpl 通过 系统服务“batteryinfo”获得。

     

        (2)系统服务“batteryinfo”是什么玩意呢?(见:BatteryStatsService.java

        Image(4)

        系统服务“batteryinfo”其实就是BatteryStatsService,而BatteryStatsService“唯一的”构造函数提供了一个很重要的信息:filename!

      

        (3)BatteryStatsService在哪里创建?filename是什么?(见:ActivityManagerService.java

        Image(5)

        filename文件是:/data/system/batterystats.bin,关于batterystats.bin,之前民间很多文章说它用作电池校正,但Android工程师Dianne Hackborn在google+上明确:

        Image(6)

        betterystats.bin文件仅仅是一个记录不同app使用电量的一个文件。

 

        (4)再看看 BatteryStatsImpl(String filename) 构造函数(见:BatteryStatsImpl.java

        Image(7)

        这里只做了些基本的初始化。真正载入betterystats.bin数据是在(ActivityManagerService.java)mBatteryStatsService.getActiveStatistics().readLocked();

        Image(8)

        Image(9)

 

        至此,Android怎样存储与读取App耗电量信息分析结束。

        总结:

        (1)ActivityManagerService 创建并初始化 BatteryStatsService,并传入耗电量记录文件batterystats.bin;

        (2)BatteryStatsService 在内部创建 BatteryStatsImpl 实例,并传入耗电记录文件batterystats.bin;

        (3)ActivityManagerService 执行 mBatteryStatsService.getActiveStatistics().readLocked();导致 BatteryStatsService 的 BatteryStatsImpl 加载batterystats.bin数据;

        (4)在PowerUsageSummary计算App耗电量时,PowerUsageSummary从BatteryStatsService 中获取BatteryStatsImpl 实例,从而获得App的相关数据。

 

    2. Android怎么存储部件电流数值

        (1)比较简单,见 PowerProfile.java

        Image(10)

        PowerProfile读取资源 com.android.internal.R.xml.power_profile,并把数据加载到sPowerMap。

 

        (2)com.android.internal.R.xml.power_profile在哪里?

        在官方文档《Power Profiles for Android》明确了power_profile.xml位置:device///frameworks/base/core/res/res/xml/power_profile.xml。

        下面是一个samsung的power_profile.xml

        Image(11)

        字段含义见《Power Profiles for Android》。

 

        (3)每个OEM厂商有自己独立的power_profile.xml配置

        官方文档表明:OEM厂商应该有自己的power_profile.xml,因为部件(如:cpu, wifi…)耗电量应与具体硬件相关,这个只有OEM厂商清楚……

        Image(12)

  

        (4)PowerProfile关键API:

        - public double getAveragePower(String type):返回type的电流值(mA),type表示power_profile.xml中的某关键字(如:gps.on)。

        - public double getAveragePower(String type, int level) :返回type的电流值(mA),level表示xml中array的第几个value。

 

        至此,Android怎么存储部件电流数值分析结束。

        总结:

        (1)Android部件电流信息存于:power_profile.xml

        (2)每个OEM厂商有私有power_profile.xml

        (2)PowerProfile读取power_profile.xml,并提供API访问部件电流数值。

 

    3. Android具体耗电量计算方法

        App耗电量统计:processAppUsage()  

        硬件耗电量统计:processMiscUsage()

 

        processAppUsage()分析

            【1】processAppUsage耗电量统计的 时间段 是?

            Image(13)

            Image(14)

            关于统计的 时间段,BatteryStats有4个选项:

            Image(15)

            可见,processAppUsage 是 上一次拔掉设备后 ~ 至今 的App耗电量统计。

          

            【2】processAppUsage 的统计对象真的是App?

            Image(16)

            具体的 统计流程 都在for循环里,额……所以processAppUsage真实统计粒度是Uid。

            Uid与App关系:2个App签名和sharedUserId相同,则在运行时,他们拥有相同Uid。就是说processAppUsage统计的可能是多个App的耗电量数据,对于普通App,出现这种情况的几率较少,而对于Android系统应用则较为常见。

 

            【3】耗电量计算公式 - 部分1:计算Uid属下每个Process的耗电量数据,并求和。

            Uid_Power1 = (Process1_Power + … + ProcessN_Power);

            Process_Power = (CPUSpeed_Time * POWER_CPU_ACTIVE);

            Image(17)

 

            【4】耗电量计算公式 - 部分2:计算Uid的wake lock耗电量

            这里,Android只计算了partial wake lock的耗电量。

            Uid_Power2 = PartialWakeLock_Time * POWER_CPU_WAKE

            Image(18)

 

            【5】耗电量计算公式 - 部分3:计算Uid的数据流量(data traffic)耗电量

            Uid_Power3 = ( tcpBytesReceived + tcpBytesSent ) * averageCostPerByte

            Image(19)

            Image(20)

 

            【6】耗电量计算公式 - 部分4:计算Uid WIFI耗电量。

            Uid_Power4 = wifiRunningTimeMs * POWER_WIFI_ON

            Image(21)

 

            【7】耗电量计算公式 - 部分5:计算Uid其他传感器耗电量。

            Uid_Power5 = (Sensor1_Power + … + SensorN_Power)

            Sensor_Power = Sensor_Time * Power_Sensor

 

            至此,App耗电量计算方法分析结束。硬件耗电量统计(processMiscUsage())亦类似。

            总结App耗电量计算公式:

                Uid_Power(App耗电量,单位:mAh) = Uid_Power1 + Uid_Power2 + Uid_Power3 + Uid_Power4 + Uid_Power5

                    Uid_Power1 = (Process1_Power + … + ProcessN_Power);

                        - Process_Power = (CPUSpeed_Time * POWER_CPU_ACTIVE);

                    Uid_Power2 = PartialWakeLock_Time * POWER_CPU_WAKE              

                    Uid_Power3 = ( tcpBytesReceived + tcpBytesSent ) * averageCostPerByte

                    Uid_Power4 = wifiRunningTimeMs * POWER_WIFI_ON

                    Uid_Power5 = (Sensor1_Power + … + SensorN_Power)

                        - Sensor_Power = Sensor_Time * Power_Sensor

 
            说这么多,来一发……不,来一个统计耗电量的App吧,其实,之前已有人把这段Android系统代码抠出来,做了一个App,可以到 这里下载。
--------------我是一个分割线--------------
            有一个好消息是:android5.0后,获取电量数据不用这么痛苦了,dumpsys  batterystats数据中。包含: Estimated power use (mAh):,下面就是每个uid的耗电量,只要把app下所有uid耗电量加起来即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泰安柒柒:一篇文章带你了解爆火的ChatGPT

OpenAI发布聊天机器人模型ChatGPT,迅速出圈全网。它以对话方式进行交互。以更贴近人的对话方式与使用者互动,可以回答问题、承认错误、挑战不正确的前提、拒绝不适当的请求。 那么,ChatGPT为什么会爆火呢? 1 ChatGPT是什么&#…

ControlNet-有条件图文生成论文阅读

文章目录 摘要算法:ControlNetControlNet in Image Diffusion ModelTrainingImproved Training 实验Canny edgesHough linesHuman scribblesHED boundary mapOpenpifpaf poseOpenposeADE20K segmentation mapCOCO-Stuff segmentation mapDIODE normal mapDepth-to-I…

如何解决“德语/文”等外文字符显示乱码问题

目录 1“德文/语字符”等外文显示乱码原因 2 如何解决“德文/语字符”等外文显示乱码 2.1 使用支持多个“编码”切换的工具打开该文本 2.2 使用变音字符的标准ASCII字符 2.3 将计算机系统切换至西欧编码 3 结尾 1“德文/语字符”等外文显示乱码原因 以德文/语为例&#…

Domino NotesV11开放下载啦!

大家好,才是真的好。此刻我正在北京的Domino NotesV11培训现场写Domino Notes V11,人数众多,群情激扬。上周五,Domino Notes V11已经开放下载,不知道朋友们下到了没有?要是下到了,告诉大家一个好…

Window内置ubuntu安装与图形界面显示

文章目录 一、Window安装ubuntu1.打开控制面板2.WSL升级1)启用适用于 Linux 的 Windows 子系统2)检查运行 WSL 2 的要求3) 启用虚拟机功能4) 下载 Linux 内核更新包5)将 WSL 2 设置为默认版本 3.安装ubuntu 二、图形界…

计算机需不需要考英语口语,哪些专业需要英语口语考试

哪些专业需要英语口语考试?下面小编为大家整理了相关内容,以供参考,一起来看看吧! 哪些专业需要英语口语考试 需要英语口语的都是英语专业或外贸,外交类专业。按照各院校要求,报考外语类专业或报考涉外专业…

【评测】SUPRAcap 100囊式深层过滤器 泽平科技一级代理

以最通用的囊式过滤器形式提供Seitz过滤介质的优良特性 对于安全可靠的工艺开发来说,可规模放大性是至关重要的,SUPRAcap 100以其通 用的结构、尺寸和可与其他滤器共同使用的特性,使其可以应用于任何开发工艺中。 借助于新的SUPRAcap100产品…

Database Meets AI: A Survey

文章目录 Abstract1 INTRODUCTION1.1 AI for DBLearning-based Database ConfigurationLearning-based Database OptimizationLearning-based Database DesignLearning-based Database MonitoringLearning-based Database Security 1.2 DB for AIDeclarative Query ParadigmDat…

突然加快,专家建议五年内禁售燃油车,新能源车迎来物联网智能科技革命

日前,著名经济学家任泽平在社交媒体发文,建议推出五年内燃油车禁售时间表,河北以南,大力发展新能源,双碳,扩大内需。新能源车辆和物联网技术结合使用将是推进该新能源车发展的重要趋势,也是实现…

MP支原体污染解决方案 | MP代理泽平科技

细胞培养过程中,经常会遇到细胞各种各样的污染。其中支原体污染是最顽固的、隐蔽的,污染率也高。这主要因为支原体是广泛存在于自然界中能独立生活的最小微生物, 直径300~800 nm, 很容易透过0.22~0.45 μm滤膜。支原体没有细胞壁,常用抗生素如…

IDT代理——北京泽平科技CRISPR基因编辑

IDT 成立于 1989年,是基因组学领域开发的领先者,也是公认的定制核酸生产行业的领导者。IDT 凭借在 DNA 合成领域的领导能力,为基因组学应用开发了专有技术,例如下一代测序、CRISPR 基因组编辑、合成生物学、数字 PCR 和 RNA 干扰。…

【评测】CellMaxx胎牛血 泽平科技代理

清原产地新西兰,自然条件优越,是世界公认的优质血源地之一;并且新西兰有着最高的动物健康标准,是欧盟指导委员会认定的极少数疯牛病非疫区。 CellMaxx胎牛血清生产采用完全认证的无菌过滤设备,严格执行GMP生产标准&…

官宣 慧存医疗与泽平科技战略合作1

近日,上海赛立维生物旗下慧存医疗科技有限公司与北京泽平科技有限责任公司达成战略合作,泽平科技成为慧存医疗全部医疗产品的全国总经销商,包含细胞冻存液、组织冻存复苏试剂盒、组织解离液、组织运输保存液、脐带组织和脐带血冻存液、肝脏细…

【智能制造】周宏仁:通俗易懂讲清楚制造业“数字化起步,网络化崛起,智能化发展”;任泽平:解码“德国制造”的七大基因

国家信息化专家咨询委员会常务副主任周宏仁撰文指出智能制造发展经历数字化起步,网络化崛起,智能化发展三个阶段。高瞻远瞩,通俗易懂,富有逻辑性,非常精彩,此文值得读三遍! 国家信息化专家咨询委…

任泽平:“云智一体”新基建将深刻影响我国实体经济

“新基建正在挑大梁!”著名经济学家任泽平在2023跨年演讲中表示。 本次演讲中,任泽平提出了2023年中国经济的十大预测。其中,“新基建”作为支撑未来20年中国经济繁荣发展的重要工程,将迎来新的发展机遇。 任泽平表示,…

雷军周年演讲上热搜,任泽平:给雷军和小米泼点冷水,不要对其神话

8月12日,雷军的周年演讲上热搜时,经济学家任泽平在官微发言称给雷军和小米泼点冷水。 图片来源任泽平个人微博截图 其中第一点谈到 人生的底部靠信仰,高位靠理性。人在低谷时一般不容易犯错,人生的大错一般是在如日中天的时候&…

黄峥不再担任拼多多董事长;恒大首席经济学家任泽平离职 | 高管变动

拼多多、中国恒大、黑石、中通快递、凯文教育、达能集团、费森尤斯卡比、巴西银行、L Brands、康桥资本、康宁杰瑞生物制药、德琪医药等公司高管变动。 中国 拼多多创始人黄峥3月17日发布2021年度致股东信,宣布经董事会批准后将董事长职位交棒给现任CEO陈磊。在不再…

新基建下的新机会,任泽平为何看好百度、华为和阿里?

文 |魏启扬 来源|智能相对论(aixdlun) 今日,一份题为《人工智能:新基建,迎接智能新时代》的研究报告在网上疯传,究其原因,除了人工智能、新基建这两个时下热门词汇的叠加之外,还在…

任泽平:95页PPT分析2018(经济、房价、政策)

任泽平:95页PPT分析2018(经济、房价、政策) 2017-12-07 06:38房价

任泽平:中国自动驾驶发展报告2020(上)

原网址: https://finance.sina.cn/zl/2021-01-15/zl-ikftpnnx7340056.d.html?oid23&vt4&cid79615&node_id79615 任泽平:中国自动驾驶发展报告2020(上) 任泽平 2021-01-15 07:11:00 文/新浪财经意见领袖专栏作家任泽…