Google Fit 应用程序如何在不耗尽电池电量的情况下一直测量步数?

Posted

技术标签:

【中文标题】Google Fit 应用程序如何在不耗尽电池电量的情况下一直测量步数?【英文标题】:How is it possible that Google Fit app measures number of steps all the time without draining battery? 【发布时间】:2015-01-20 14:25:11 【问题描述】:

Google Fit 应用程序在安装后会测量您步行或跑步的持续时间,以及所有时间的步数。然而,奇怪的是,使用它似乎并没有耗尽电池。 Moves 之类的其他应用程序似乎可以非常准确地记录步数,因为它会持续监控 GPS 和加速度计,因此会消耗大量电量。

我设想了几种可能性:

每分钟左右唤醒手机,然后分析传感器几秒钟,然后再次休眠。不过,记录似乎是精确到分钟的,所以起床一定很频繁。 实际上一直开启加速度计,只有在加速度计测量数据缓冲区满后才进行分析。不过我认为加速度计有一个小的缓冲区来存储最新的测量结果。 使用 GPS估计步数,而不是实际计算步数。但是,情况并非如此,因为它甚至可以在室内使用。

应用仍然感觉神奇。一直在计算步数,而没有明显的电池消耗。

【问题讨论】:

我怀疑你的第二点是正确的,除了他们可能只是将缓冲区内容存储到文件中而没有任何处理(让处理器空闲)。处理很可能在更大的时间间隔内完成(或者就在您查看数据之前)。 【参考方案1】:

拥有 3 年历史的 HTC OneX 我可以说没有专用硬件,Google Fit 只是以一种非常聪明的方式使用标准传感器。我来自 Runtastic 计步器:使用时有明显的电池消耗,因为它需要完整的加速度计电源,所以不可能一直保持开启状态。另一方面,如果您站着不动摇晃手机,Runtastic 会计算摇晃次数,而 Google Fit 显然什么也不做……当您实际走路或跑步时,它仍然可以正常工作。魔法。

【讨论】:

【参考方案2】:

Google fit 尝试学习使用 pedo 步模式,并尝试创建自己的个人步行模式及其集群。这消除了每次接收传感器数据时都需要进行大量数学计算。与其他软件 pedo 应用程序相比,这使 Google 更节能。话虽如此,这里的准确性因素存在妥协。在功率精度权衡之间,谷歌似乎更倾向于这里的功率因数。

目前最省电的检测发生在三星旗舰及其其他高端机型。感谢三星的专用硬件芯片!无论您的软件 pedo 算法的能效如何,但其专用硬件单元的优势都难以匹敌。我还听说 Google 为 Ped 即将推出的 nexus 设备带来了专用硬件单元。

【讨论】:

【参考方案3】:

感谢您提出这个问题!

电池是我们最关心的问题之一,我们努力优化 Google Fit 的电池使用并提供神奇的体验。 Google Fit 混合使用传感器(加速度计、计步器、显着运动计数器)、机器学习和启发式方法来获取正确的数据。我们的算法与您的第一个选项非常相似,加上一点魔法。

我们会定期轮询加速度计并使用机器学习和启发式方法来正确识别活动和持续时间。 对于带有硬件计步器的设备,我们使用这些计步器来监控步数。对于较旧的设备,我们使用检测到的活动来预测正确的步数。 我们的算法会合并这些活动、步骤和位置,以关联并进一步提高准确性。

我们不会通过轮询 GPS 来估计步数或检测活动。

-- Google Fit 团队的工程师。

【讨论】:

这是一个相当有趣的应用程序。使用陀螺仪传感器检测行人声音是合理的(每一步的 z 峰值)。但是骑自行车的工作也相当准确。 GPS信息真的不用于骑行吗?仅使用陀螺仪传感器和软件即可获得距离? 对我来说,一些旧设备无法使用 Google fit Api 检测步数,有什么想法吗? 这在 android API 上可用吗? 但是在 Google Fit 应用程序上仍然会发生设备的晃动,即使没有采取任何步骤,也会被计为一个步骤。有什么解决办法吗? 摇动设备确实会给你一两步(即使在床上滚动也算一步!)。但是,话又说回来,如果您自己计算步数并将其与 FIT 进行比较,则不会非常准确。所有无法避免的设备总是存在误差范围,除非您使用与身体部位相关的特定设备?!【参考方案4】:

我不知道其他手机的情况,但 Google Fit 确实耗尽了我在 Nexus 5 上的电池寿命。禁用它肯定会延长我的电池寿命。

【讨论】:

【参考方案5】:

虽然 Nexus 5 确实内置了专用的“低功耗”计步器,但它并不像您想象的那样“低功耗”。

当我开启 Google Fit 活动检测时,我的 Nexus 5 电池寿命减少了大约 25%。

此外,计步器不会显示在电池使用情况统计信息中。大概是因为它是硬件的东西。

【讨论】:

【参考方案6】:

似乎该解决方案将取决于设备,对于可用于低功耗操作的协同运动处理器或“wimpier”内核的设备,一旦缓冲区已满或类似情况,它将默认为此。对于没有低功耗内核的设备,唤醒设备似乎会触发 JIT 操作,该操作将/应该在调用应用程序时完成。

【讨论】:

【参考方案7】:

在一些最新的手机上,例如 Nexus 5(2013 年底发布,搭载 Android 4.4 KitKat),有一个专用的低功耗 CPU 内核,可以用作计步器。由于该内核功耗极低,并且无需整个 CPU 或 GPS 即可自行计算步数,因此大大降低了整体电池使用量。在最近的 iPhone 上,有一个类似的微控制器,在 iPhone 5s 中称为 M7 协处理器,在 iPhone 6 中称为 M8。

更多信息在这里:

https://developer.android.com/about/versions/kitkat.html

http://nexus5.wonderhowto.com/how-to/your-nexus-5-has-real-pedometer-built-in-heres-you-use-0151267/

http://www.androidbeat.com/2014/01/pedometer-nexus5-hardware-count-steps-walked/

【讨论】:

以上是关于Google Fit 应用程序如何在不耗尽电池电量的情况下一直测量步数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 gps 捕获经纬度而不会耗尽电池电量

为啥我的 Android 应用程序偶尔会非常快地耗尽电池电量?

我的 Android 应用程序正在耗尽电池电量吗?

如何在不耗尽电池的情况下监控 MPMoviePlayerController 播放进度?

Android 定位服务耗尽电池 - 融合定位 API

如何检测 iPhone 应用程序中的内存泄漏/电池耗尽