【发布时间】:2014-08-21 06:56:38
【问题描述】:
我正在创建一个类似于“Moves”应用程序的活动跟踪器,旨在跟踪步数、距离、卡路里和活动时间。
对于 Iphone5s+ 设备,我使用内置的 M7 芯片来确定 Steps,然后据此估算其余部分。对于 M7 设备,我从不使用 GPS。基本上没有电池消耗,并且内插数字足以满足需要。这可以获得足够合理的步行/跑步数据。
但是至少要支持 Iphone5 和 Iphone4,我需要使用 GPS 来获取位置,然后从距离插入步数和卡路里。我遇到了严重的电池消耗问题(有些意料之中),并正在寻求有关如何将其最小化的建议。除了速度之外,我还使用加速度计来帮助对活动类型(步行、跑步、骑自行车、交通)做出有根据的猜测
我为 GPS 优化尝试过的一些事情:
- 延迟更新:Iphone5 和最低版本的 IOS 支持此功能。执行此操作的代码很简单,但是设备是否实际使用它是值得怀疑的。我只看到它可以在 4 台设备中的 1 台上正常运行。其他 3 台设备从未延迟相同代码的更新。另一位用户建议其他应用程序阻止设备进入睡眠状态,包括当我还安装了“Moves”时。因此,这在理论上并没有太大帮助。
- 降低准确性:降低连续位置轮询的准确性。我从 High 开始,但减少到 10m,然后是数百米等。这似乎没有帮助,而且轮询似乎仍然定期发生。
- startMonitoringSignificantLocationChanges:为了在用户可能数小时不移动(尤其是在晚上)时减少无休止的 gps 轮询,我从连续轮询切换到仅在设备停止移动一段时间后才进行重大更改任意2分钟。然后我在任何重要的位置更新后重新启用连续跟踪。这和预期的差不多——如果它停止跟踪,那么电池消耗就会减慢,当它持续恢复时,电池消耗就会恢复。此外,如果用户开始行走,则在一段时间内无法保证重要的运动事件。这对于准确性来说非常差。有时它似乎根本没有恢复。
我印象比较深刻的是,“Moves”应用程序以及其他应用程序能够以可观的电池消耗很好地跟踪位置。它可以持续一天的大部分时间,直到需要充电。使用我的代码,用户会在几个小时内报告电池电量耗尽。
可以使用什么样的优化来改善这一点,但在跟踪运动时仍保持合理的准确性?
进度更新: startMonitoringSignificantLocationChanges。我设置了一个计时器,该计时器在 2 分钟不活动(不移动)后切换到显着监控。然后,在发生任何重大更改时或当应用程序从重新打开后变为活动状态时,会再次恢复正常的位置跟踪。这似乎运作良好。我的手机仍然会在 8 小时内从 100% 变为 10%。这是一部旧 iPhone,有一些电池问题,但通常它可能会在一夜之间失去 30-40% 的电量而没有运行任何应用程序。我需要进行更多测试,但 startMonitoringSignificantLocationChanges 似乎仍然会消耗一些电量。
此外,startMonitoringSignificantLocationChanges 在重新启动应用程序时存在一些预期的准确性问题。在农村环境中,它可以在重新启动之前行驶几公里。这对于长途驾驶来说可能没问题,但如果我想赶上 30 分钟的步行路程,它可能会完全错过。在城市环境中,它似乎在 2-3 个移动街区内开始,这是合理的。
即使我使用在计时器上停止+启动的连续位置跟踪来检查移动情况,在恢复连续记录之前,我仍然可能在重新启动之间延迟一分钟。
进度更新 2:
上面描述的重大变更更新对我来说有一个致命的缺陷:它们并不总是启动得足够快。有时它似乎需要1-2英里!
作为一种更好的方法,我尝试保持连续的位置更新,但在设备不移动时将“desiredAccuracy”属性从高准确度切换到低准确度。这实际上应该在不活动期间关闭 GPS 接收器。我一直在试验 100 米到 1 公里的不活动精度,结果很有希望。与仅使用显着变化监控相比,它似乎使用了稍微多一点的击球手,但它似乎也更具响应性。
【问题讨论】:
-
您能否评论一下 Moves 可以工作多少小时直到电池耗尽。以及您当前的 App 使用了多少小时?
-
我需要测试这个比较。在单个设备上进行主动开发意味着每天都要进行全天测试。也许周末我可以做这些专门的测试。
-
好的,我在一次徒步旅行中进行了测试。电池的续航时间比我的健身时间长(或计划的徒步旅行的长度),所以 8 小时后仍有剩余电量。