0

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

我尝试在执行之前和之后测量剩余电池容量microampere-hours和剩余能量。但这还不够准确。这甚至有可能做到吗?nanowatt-hoursBatteryManager

这是我尝试过的:

mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);

编辑:

肯定是模拟器不消耗能量,这就是为什么我的消耗为 0。是否可以使用 android 模拟器模拟功耗,或者我需要一部真手机?

4

2 回答 2

2

这是我测量所用能量的方法(因为这是你想要的,而不是功率)。

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

分析:(你需要这样做)

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

我之前开发过一个类似的App,但用于评估每个应用程序的功耗。但据我所知,谷歌的电池静态 API 根据每个 UID 评估功耗,包括硬件和软件。我认为您可以通过查看 Android 的源代码找到更多信息,尤其是 BatterySipper.java 和 BatteryStatsHelper.java。

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

于 2016-12-09T15:33:31.680 回答