Android功耗方法

时间:2015-05-19 09:38:21

标签: android android-emulator battery batterymanager

对于研究项目,我需要测量某些功能的功耗。所以我想测量一种方法的功耗。例如:方法computeSomething()需要x microampere-hours。这可能吗?如果是,怎么样?

我尝试用microampere-hours测量nanowatt-hours中的剩余电量和BatteryManager执行前后mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER); 的剩余电量。但这还不够准确。这甚至可以做到吗?

这是我试过的:

appointments 
id integer primary key 
price decimal

line_items 
id integer primary key 
price decimal 
appointment_id integer foreign key

编辑:

确定它是不消耗能量的模拟器,这就是我消耗0的原因。是否可以使用android模拟器模拟功耗或者我是否需要真的手机?

2 个答案:

答案 0 :(得分:1)

以下是我如何测量所用的能量(因为这是你想要的而不是力量)。

  1. 关闭(或不使用)我能做的一切,包括网络,手机,USB等。
  2. 禁用手机上的所有省电功能
  3. 记录手机文件系统上的所有数据(通过USB或无线方式)
  4. 将程序包装在一个大循环中,使其运行时间至少为几秒钟,也许是几分钟
  5. 运行您刚刚做过多次的测试程序(> = 16次以获得统计显着性)
  6. 在相同的时间内测量静止的手机并收集使用的能量。
  7. 分析:(你需要这样做)

    1. 检查功能运行和“静止”运行的统计偏差(标准偏差)。如果std dev很大,那么正在使用能量的其他东西。
    2. 找出BatteryManager的分辨率。仅仅因为字段以nWatts标记并不意味着硬件在该分辨率下测量它(并且它可能不是)。开发数据结构的人希望该结构在许多硬件和可预见的未来都有用。因此,即使大多数硬件最多只能测量,例如十分之一瓦,它们也可以在很小的范围内(例如nWatts)进行现场测量。
    3. 如果可能,请使用电池和手机之间的硬件插入器直接测量能量/功率。这解决了BatteryManager实施的不确定性。
    4. 为了安全起见,您可能还会发现BatteryManager用于测量功率的集成窗口有多长。这些测量通常涉及用于计算平均值的移动窗口。
    5. 模拟器不会为您提供任何有用的信息。仿真器测试功能而不是其他功能。即使粗略衡量表现也是非常不确定的。

答案 1 :(得分:0)

之前我开发过类似的应用程序,但用于评估每个应用程序的功耗。但据我所知,谷歌的电池静态API根据每个UID(硬件和软件)评估功耗。我想你可以通过查看Android的源代码找到更多信息,特别是对于BatterySipper.java和BatteryStatsHelper.java。

对于模拟器,Android系统使用power_profile.xml作为参考来计算功耗。该文件通常由制造商修改。也许它不包含在模拟器中。