定期后台获取

Posted

技术标签:

【中文标题】定期后台获取【英文标题】:Background fetch regularly 【发布时间】:2017-07-17 14:04:00 【问题描述】:

我想每 30 秒到 1 分钟在后台上传一次位置。是否可以? 我发现我可以设置UIApplicationBackgroundFetchIntervalMinimum。但是我环顾了这个常数,告诉设备大约每 30 分钟获取一次。有什么办法吗?谢谢。

【问题讨论】:

【参考方案1】:

我不知道您每 30 秒上传一次位置的确切目的。不建议这样做。我认为您可以在 CoreLocation 框架中使用 MonitoringSignificationChanges。每当位置发生重大变化时,它都会为您提供更新。它有助于节省电池电量

通过以下方法根据重大位置变化开始生成更新:

func startMonitoringSignificantLocationChanges()

此方法以异步方式启动位置事件的传递,并在您调用它后立即返回。位置事件被传递到您的委托的 locationManager(_:didUpdateLocations:) 方法。要传递的第一个事件通常是最近缓存的位置事件(如果有),但在某些情况下可能是较新的事件。获取当前位置修复可能需要几秒钟的时间,因此请务必检查委托方法中位置事件的时间戳

更多信息:Apple Docs

【讨论】:

我已经试过了。如果用户不移动,则不会调用此委托方法。我什至尝试使用静默通知来告诉应用程序更新。发送一段时间后,APNs 服务器将停止发送约 20 分钟。我也试过计时器。 @CarlHung 你应该甚至这样做,***.com/questions/41021733/… 多次发送静默推送通知并不能保证通过 APNS 传递。如果请求太多,它会忽略【参考方案2】:

您的方法存在多个问题。大多数应用程序都不允许像您想要的那样在后台连续运行。您将获得约 3 分钟的后台时间,然后您的应用程序将被暂停。导航应用是个例外。如果您的应用是导航应用,您可以在后台连续运行。

除非您是导航应用,否则每 30 秒轮询一次 GPS 也是一个坏主意。您会很快耗尽用户的电量。

同样,每 30 秒上传一次用户的位置信息将使手机上的蜂窝/WiFi 无线电几乎持续通电,这将很快耗尽用户的电池电量。

【讨论】:

以上是关于定期后台获取的主要内容,如果未能解决你的问题,请参考以下文章

HBuilder后台保活开发(后台自动运行,定期记录定位数据)

在 iOS 中定期在后台线程中运行任务

iOS中的后台获取

无法在后台服务中使用 LocationManager 获取位置

在后台服务中创建地理围栏

定期后台同步