【问题标题】:CoreLocation stops working in background after certain amount of timeCoreLocation 在一定时间后停止在后台工作
【发布时间】:2014-10-13 03:53:25
【问题描述】:

我正在开发一个用于健身(跑步)的 iOS (7.0+) 应用程序,该应用程序使用用户 GPS 位置,进行少量计算并将数据传输到蓝牙低功耗 (4.0) 手表。这个过程需要在后台进行,即使用户锁定了他们的 iOS 设备。

我也实现了以下后台模式:

 App communicates using CoreBluetooth
 App registers for location updates

我已经成功地让一切正常工作,除了在设备锁定一定时间(例如 2 小时)后,iOS 设备停止更新位置,因为我可以看到它不是向蓝牙手表发送更新 GPS 值的时间更长。然后我必须解锁设备,重新打开应用程序,定位服务再次正常工作。

有谁知道如何让定位服务在后台一直运行(设备锁定),而不会在一段时间后突然停止位置更新?如果可能的话,一个有效的解决方案将是首选,它不会比使用 GPS 的正常情况消耗更多的电池电量。

【问题讨论】:

  • iPhone 没有足够大的电池来长时间准确监控您的位置。任何试图这样做的东西都被认为是一个错误,因此应用程序被终止。如果您按原样提交您的应用程序,您可能会根据准则 13.2 被拒绝,因为它会导致严重的电池消耗,这可能会导致电池在 Apple 的保修期内出现故障。
  • 这个问题已经在 iPhone 5S 中通过新的 M7 协处理器得到了一定程度的纠正,它具有最小的电池消耗但也不能提供相同级别的细节,所以也许它对你没用应用程序。
  • @Abhi 应用程序不会仅仅因为它们长时间使用位置而被终止。我们在商店中的应用程序可以成功收集数小时的曲目,每 1 秒获得一次积分。
  • FWIW 一定的时间是 17 分钟。如果将pausesLocationUpdatesAutomatically 设置为false 则不会停止

标签: ios objective-c core-location cllocationmanager ios-background-mode


【解决方案1】:

最重要的是:确保在启动CLLocationManager 之前将pausesLocationUpdatesAutomatically 设置为NO(请参阅docs)。

为了最大限度地减少电池使用量,您还应该使用延迟位置更新 (more details on SO)。这允许 CPU 在 GPS 芯片为您收集位置更新时休眠并节省电池电量。它会定期将它们转储到 CPU。如果您需要每秒更新一次手表,这可能不适合您,但如果您可以每 10 或 20 或 30 秒更新一次,它将节省那么多 CPU 唤醒次数。

【讨论】:

  • 只是要清楚这一点。我认为延迟是推迟到 5-30 分钟。但你只是说它最多延迟 30 秒?!你能详细说明一下吗?
  • 1) 只是要清楚这一点。我认为延迟是推迟到 5-30 分钟。但你只是说它最多延迟 30 秒?!你能详细说明吗? 2) 你应该设置的最小超时时间是多少,这样你才能节省一些电池?
  • 我从来没有说过最大,30秒只是一个例子。与每秒唤醒一次 CPU 相比,延迟 10 分钟(600 秒)将节省大量的 CPU 唤醒次数。
猜你喜欢
  • 2011-10-05
  • 2019-03-04
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多