电能W(焦耳J) = 电功率P(瓦特W) * 时间T(s) = 电压U(福特V)* 电量Q(库仑C)java
电功率P(瓦特W) = 电压U(福特V)* 电流I(安培A),表示电流作功快慢。代入上面的公式,获得:android
电量Q(库仑C)= 电流I(安培A)* 时间T (s)spa
cpu = cpuSpeedStepTimes[step]/totalTimeAtSpeeds * (user time + system time) * powerCpuNormal[step]orm
wake lock = wake lock duration * power_profiler.xml 中 type = cpu_awake 的数值xml
data transformation = data bytes * getAverageDataCost()get
wifi running = wifi running duration * power_profiler.xml 中 type = wifi_on的数值io
gps = gps sensor * power_profiler.xml中的type=gps_on的数值编译
other sensors = sensor duration * sensor defaultform
所以,电量计算公式为:mobile
电量(mAs) = cpu + wake lock + data transformation + wifi running + gps + other sensors
关于 power_profiler.xml
路径:xref: /frameworks/base/core/res/res/xml/power_profile.xml,运行时被编译到 /system/framework/res/xml下
解析代码:xref: /frameworks/base/core/java/com/android/internal/os/PowerProfile.java