详细的电池使用情况 - iOS

Mic*_*igo 6 gps cocoa-touch battery instruments ios

我目前的项目是一个持续存在的应用程序(想想Tinder或Foursquare),电池消耗是通过屋顶.我们认为主要的功耗是GPS和WiFi天线.我们希望能够在几种不同的配置下测量我们的应用程序的能源使用情况.

但是怎么做呢?我们想要一个过程:

  • 可以与断开计算机的手机一起使用(所以我们知道我们使用的是电池,而不是通过USB吸取电源),
  • 具有足够的粒度,允许我们将能量峰值与应用程序事件相关联(启动应用程序,更新位置,将分析信息发送到Mixpanel等),
  • 可以在没有保姆的情况下过夜,
  • 可以导出为CSV或其他任何用于统计分析.

我知道这个清单.

这些是要求,以下是我所知道的选项:

1.打开iOS设备上不受限制的能量诊断记录,并导出到仪器

这是明显的答案,但它有一个巨大的缺陷.

优点:

  • 使用电池而不是USB电源.
  • 出色的粒度(1秒时间序列数据,20个离散能源使用水平),
  • 与GPS天线使用等其他设备事件相关

缺点:

2.通过仪器监控插入的电话

优点:

  • 与其他设备事件具有相同的优异粒度和相关性.
  • 电池不能耗尽.

缺点:

  • 不使用电池,因此能耗是实际使用所无法比拟的.
  • 仪器甚至无法可靠地显示能源使用情况.有时它只是空白.
  • 无法导出为CSV.

3.使用公共Cocoa API在我们的应用程序中记录能源使用情况 - [UIDevice.currentDevice batteryLevel]

这是SO上最常见的答案.我看过iOS,iphone 上的预计电池续航时间:计算电池续航时间和其他十几个电池续航时间.

优点:

  • 测量之间任意间隔很小.
  • 即使电池因某种方式写入磁盘而死亡(CoreData,默认,网络等等),也可以保留数据.
  • 可以为数据选择任意格式,比如CSV.

缺点:

  • 比其他方法更多的工作.
  • 公共API仅为您提供5%准确度的电池电量.这基本上是我们从方法1和2获得的瞬时功耗数据的时间积分.不太精细到足以与其他设备事件相关联(但可能足以获得设备电池寿命的总估计).

4.使用私有Cocoa API记录能源使用情况

由于我们在开发期间只会这样做,因此Apple拒绝使用私有API的应用程序并不重要.据推测,有一些私有API,因为Apple能够在Untethered Energy Diagnostics打开的情况下记录数据.

优点:

  • 任意粒度,任意文件格式,任意持久性.

缺点:

  • Waaaaay更多的工作要弄清楚如何使用它.也许甚至不可能.

5.综合方法

我们可以使用不受限制的诊断来量化每个动作的边际能量成本."好吧,旋转GPS天线需要150mW•H.计算位置需要50mW•H.发送Mixpanel事件需要25mW•H,除非我们在之前的30秒内进行了另一次网络呼叫,在这种情况下需要15mW•H." (当场发明的所有数字.)然后我们可以使用系留监测来记录每个动作何时发生,插入线性方程,并估计它应该采取的能量.

优点:

  • 灵活.任意一切.

缺点:

  • 数学.
  • 非常容易错过非线性贡献.获得类似E = k0 /(gps轮询间隔)+ k1*(分析呼叫数量)之类的东西很容易,但是如果旋转两个天线的成本低于分别旋转它们的总和呢?
  • 忽略Apple可能在位置服务中内部执行的任何缓存策略.
  • 甚至远远不能接近现实世界的利用率.

无论如何,我已经足够了.有没有人这样做过?怎么样?

Ale*_*ien 1

GPS 每小时需要 10% 的电量,因此每秒可持续约 10 小时的高精度位置记录。位置轮询间隔与电池消耗无关。GPS 芯片是否启用。没有低功耗 GPS 模式!如果您知道用户不需要 GPS,您可以禁用它。

为了永久记录位置数据,如果您决定采用低精度(1000m 手机信号塔或 WLAN 定位)而不是高精度(3-6m = GPS),则只能节省电池电量

当然,在测量过程中,您将杀死所有 3d 派对应用程序,尤其是即时通讯应用程序,其中最著名的每秒都会连接到互联网!