后台任务iPhone

后台任务iPhone,iphone,objective-c,ios,core-location,Iphone,Objective C,Ios,Core Location,我试图在后台根据计时器实现位置更新。我知道iOS中不同的位置更新方法,并尝试过它们,但它们不适合这种需要。我需要经常检查位置,即使在不活动时也是如此。我尝试过使用计时器,但它们不会在后台执行。这让我找到了这个问题,它提到了使用 UIApplication:beginBackgroundTaskWithExpirationHandler: 我的问题是你如何使用这种方法?我搜索了苹果文档,但在处理后台执行和位置更新时,它们递归地指向对方,没有任何示例 我现在根据我发现的一些示例编写了这段代码: -

我试图在后台根据计时器实现位置更新。我知道iOS中不同的位置更新方法,并尝试过它们,但它们不适合这种需要。我需要经常检查位置,即使在不活动时也是如此。我尝试过使用计时器,但它们不会在后台执行。这让我找到了这个问题,它提到了使用

UIApplication:beginBackgroundTaskWithExpirationHandler:
我的问题是你如何使用这种方法?我搜索了苹果文档,但在处理后台执行和位置更新时,它们递归地指向对方,没有任何示例

我现在根据我发现的一些示例编写了这段代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{    
    locationUpdater=[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:locationUpdater];
        locationUpdater=UIBackgroundTaskInvalid;
    } ];
}
我在.plist中添加了支持的后台模式的键“location”


添加这一点是否可以保证我的应用程序在一定时间内不会被终止,这样我就可以保持计时器运行?或者在哪里添加在后台模式下执行的方法。

如果您的后台任务运行时间超过10分钟,您的应用程序将被终止


您真的应该使用操作系统位置服务来获得有关位置更改的通知。为什么这还不够?如果位置没有改变,那么反复检索位置又有什么意义呢?一旦位置改变,就会通知您。

有关概念理解,请查看

有关精度的详细分析,请访问


您应该开始使用
startMonitoringSignificantLocationChanges
。您可以找到示例代码参考

更新之间的时间间隔和距离不够精确,无法满足我的需要。显然,如果我不需要这个位置,我会重新启动计时器。后台任务是否与正常执行一样?您是否将该代码放在didEnterBackground中?有一种位置管理器“导航”模式,据说即使在开车时显示实时位置也相当准确-您正在使用它吗?或者你需要它来提高飞行速度?后台任务与正常执行类似,是的,但如果您滥用它,应用程序将被操作系统杀死,甚至被审查小组拒绝。那么,如果我在这个后台任务中创建一个计时器,每分钟发送一个请求,该怎么办?十分钟后,我的应用程序将被终止?如果是这样,我可以在每次计时器失效时销毁并再次创建该后台任务。我错了吗?当应用程序在后台时,计时器不会启动。