[Android电量] 耗电概述 & 计算公式

  • 时间:
  • 浏览:0
  • 来源:万人炸金花IOS_万人炸金花APP下载

应用tcp连接的耗电量由好多好多 累积组成,为啥让使用了GPS,蓝牙等模块,为啥让应用tcp连接要求长时间亮屏(譬如游戏、视频类应用)。 一个 应用tcp连接的电量统计,还不需要 能 采用累计应用tcp连接使用所有硬件模块时间什儿 妙招 近似计算出来。

电量信息统计服务的统计妙招 还不需要 能 简单总结为:耗电量 = 模块耗电功率 * 模块耗电时间,其耗电功率中硬件耗电功率由硬件厂商提供过来的Power_profile.xml 中配置好了,模块耗电时间为系统中各种Timer 计时器来统计的。

电量统计服务是一个 系统服务,名字为batterystats,在Android系统启动的前一天,什儿 服务就会被启动,其启动时序如下图所示:

void refreshStats(int statsType, SparseArray asUsers, long rawRealtimeUs,

long rawUptimeUs) {

batterystats服务启动时,会从 batterystats.bin 什儿 文件中读取数据,来初始化BatteryStats什儿 数据价值形式。

Android怎么启动电量统计服务?

电量统计涉及到哪什儿 硬件模块?

怎么计算一个 应用tcp连接的耗电量?

电量统计不需要 能 完成哪些地方具体工作?

Android框架层通过一个 名为batterystats的系统服务,实现了电量统计的功能。batterystats获取电量的使用信息有什儿 妙招 :

电量计算大体还不需要 能 分为两块:软件App功耗、硬件功耗

至此,让让.我 让让.我 分析了以下一个 大问题:

硬件功耗计算函数在:processMiscUsage()

手机有好多好多 硬件模块:CPU,蓝牙,GPS,显示屏,Wifi,射频(Cellular Radio)等,在手机使用过程中,哪些地方地方硬件模块为啥让所处不同的情况,譬如Wifi打开或关闭,屏幕是亮还是暗,CPU运行或休眠。 硬件模块在不同的情况下的耗电量是不同的。Android在进行电量统计时,并全是采用直接记录电流消耗量的妙招 ,好多好多 跟踪硬件模块在不同情况下的使用时间,派发什儿 可用信息,用来近似的计算出电池消耗量。

派发到的电量信息,在内存中是由BatteryStats什儿 类来描述的,Android支持历史电量信息的显示的,为啥让重新启动Android,那内存中的数据就丢失了, 好多好多 不需要 能 把哪些地方地方信息存储到磁盘上,磁盘上的 /data/system/batterystats.bin 文件中好多好多 电量信息的序列化数据。

在手机上电压一般是恒定的,好多好多 ,计算耗电量只不需要 能 知道单位时间电流量即可。有了power_profile.xml什儿 文件描述的单位时间电流量,再派发硬件模块在不同情况下的使用时间,就不需要 近似的计算出耗电量了。

好多好多 ,在手机使用的过程中,派发到的电量信息,就会被当作历史信息,不定时的写入到磁盘保存下来,下次batterystats启动时,又会被用到。

.... // 记录移动数据流量到mMobilemsppList 中

举一个 例子,假定某个APK的使用了GPS,使用时间用 t 表示。GPS模块单位时间的耗电量用 w 表示,不在 ,什儿 APK使用GPS的耗电量就还不需要 能 按照如下妙招 计算:

...... //初始化什儿 PowerCalculato 以及各类时间参数

前面让让.我 让让.我 提到耗电量是通过计算:

电量统计服务是间接由ActivityManagerService(后文简称AMS)来启动,AMS是Android系统最为基础的服务,进入Android系统后,最优先启动的,好多好多 相似服务。

Android怎么启动电量统计服务? Android系统启动 -> AMS启动和注册 -> batterystats启动和注册

系统中将耗电总共分成了五大类:App,Wifi,Bluetooth ,User,Mobile。

核心除理只一个 函数:

}

记录应用tcp连接中所有Activity从显示情况(Resumed)到消失情况(Paused)的时间,就不需要 统计应用tcp连接的前台运行时间。Activity情况的切换是由AMS掌控的,为啥让AMS不需要 能 将Activity的情况信息通知给batterystats服务。

除了应用tcp连接前台运行时间,还有好多好多 信息是batterystats服务关注的,包括WakeLock、Sendor、Wifi、Audio、Video等,哪些地方地方信息的派发妙招 全是经过以下步骤:

.... // 对统计数据做什儿 去杂和优化

电量计算流程及公式图

processMiscUsage :什儿 杂项耗电量计算,所谓杂项,着实好多好多 用户比较关心的一大类,包括:待机的耗电量、亮屏的耗电量、通话的耗电量、Wifi的耗电量等

//计算app 消耗的Cpu电量到cpuPowerMah 中

让让.我 让让.我 平常说的手机耗电量,一般富含 一个 方面:硬件层面的功耗和软件层面的电量。

应用tcp连接为啥让会使用多个硬件模块,好多好多 ,耗电信息派发的策略也被设计得比较多样化,譬如,要使用到好多好多 计时器,就设计出了“计时器池”来提高资源利用率。

本文介绍的电量统计的原理,之好多好多 涉及到硬件层面的功耗设计,仅从软件层面围绕以下几条大问题进行分析:

参考文献

1、https://duanqz.github.io/2015-07-21-batterystats-part1#33-%E7%94%B5%E9%87%8F%E8%AE%A1%E7%AE%97

派发信息被组织起来,在内存中的数据价值形式是由BatteryStats类描述的。 为了不需要 之好多好多 同维度统计耗电量,什儿 数据价值形式设计得比较多样化,让让.我 让让.我 不在 这里展开讨论。

电池电量耗费的源头着实不在 来太少,基本Android 设备上任何一个 活动全是引起电池电量的消耗。

frameworks/base/services/java/com/android/server/SystemServer.java

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java

frameworks/base/core/java/android/os/BatteryStats.java

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

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

frameworks/base/core/res/res/xml/power_profile.xml

电量统计服务的代码逻辑涉及到以下android源码:

派发的信息基本都富含 硬件模块的情况和被使用的时间一个 维度。为哪些地方仅仅是派发不同硬件模块的使用时间呢? 前面让让.我 让让.我 说过,手机电压通常是恒定的,耗电量是通过 “单位时间电流量(I) × 使用时间(t)” 来计算,而单位时间电流量是由厂商给定的,定义在power_profile.xml中, 好多好多 ,只不需要 能 派发不同硬件模块的使用时间,就还不需要 能 近似的计算出耗电量了

目前累积手机有 耗电排行的功能, 能显示出App耗电详情排行。着实谷歌开放sdk 中并不在 公开电量统计的API 为啥让文档,但为啥让安全中心->低油耗优化→耗电排行 中好多好多 通过app 能显示出耗电详情排行,好多好多 着实未公开API但实则有相关的耗电API。耗电名单在主要记录在BatterySipper上面(在frameworks/base/core 下)

Android怎么计算耗电量? 并全是直接跟踪电流消耗量,好多好多 采用“单位时间电流量(I)×使用时间(t)”来做近似计算。不同硬件模块的单位时间电流量是不需要 能 厂商给定的。