在后台运行时每x秒重复一次任务

时间:2016-04-04 14:21:19

标签: ios objective-c

我正在建立一个位置跟踪应用程序,该应用程序在本地存储用户位置,并每隔x秒将它们发送到服务器。

当应用程序处于前台时,我可以使用NSTimer来安排服务器更新任务,但是当应用程序在后台运行时,这是不可能的。

即使应用程序在后台模式下运行,我怎么能每x秒重复一次任务?

2 个答案:

答案 0 :(得分:0)

您可能最好在后台注册重要的位置更改,这意味着当用户位置发生显着变化时,您的应用会有一点时间来处理/发送它。

使用apple docs可以轻松完成此操作。

答案 1 :(得分:0)

你不应该使用NSTimer。您应该使用CLLocationManager提供的功能。

使用CLLocationManager时,您可以将属性allowsBackgroundLocationUpdates设置为YES。然后,您需要将Info.plist中的UIBackgroundModes密钥设置为YES location值。

现在,您将能够收到用户所在位置的背景更新。

startMonitoringSignificantLocationChanges应继续在后台调用。

用背景材料警告几句话。 Apple在提交应用时非常重视这一点。如果他们不认为有必要进行后台更新,他们会拒绝。同样,如果你在背景中做的不仅仅是非常基本的东西,他们会拒绝它。

因此,如果您想将用户的后台位置同步到服务器,我不会在后台执行此操作。相反,我会将用户的背景位置存储在NSUserDefaults或核心数据等中,然后当应用再次变为活动状态时,请使用背景位置执行服务器同步。

Here's a link to CLLocationManager for reference