【问题标题】:Background tasks iPhone后台任务 iPhone
【发布时间】:2011-09-09 21:29:27
【问题描述】:

我正在尝试基于计时器在后台实现位置更新。我对 iOS 中不同的位置更新方法了如指掌,并尝试过它们,但它们不符合需要。即使不活动,我也需要经常检查位置。我试过使用计时器,但它们不在后台执行。这导致我找到了这个问题How do I get a background location update every n minutes in my iOS application? 并提到使用

UIApplication:beginBackgroundTaskWithExpirationHandler:

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

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

- (void)applicationDidEnterBackground:(UIApplication *)application
{    
    locationUpdater=[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:locationUpdater];
        locationUpdater=UIBackgroundTaskInvalid;
    } ];
}

我在 .plist 中添加了关键的“位置”以支持背景模式

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

【问题讨论】:

    标签: iphone objective-c ios core-location


    【解决方案1】:

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

    您确实应该使用操作系统位置服务来获取有关位置更改的通知。为什么这还不够?如果位置没有变化,一遍又一遍地检索它有什么意义,一旦它发生变化,你就会收到通知。

    【讨论】:

    • 时间间隔和更新之间的距离不够准确,无法满足我的需求。显然,如果我不需要该位置,我只会重新启动计时器。后台任务和正常执行一样吗?您是否将该代码放入 didEnterBackground 中?
    • 有一个位置管理器“导航”模式,据说即使在开车时显示实时位置也相当准确 - 你在使用它吗?还是您需要它来提高飞机速度?后台任务就像正常执行一样,是的,但如果你滥用它,应用程序要么被操作系统杀死,甚至被审核团队拒绝。
    • 那么,如果我在这个后台任务中创建一个每分钟发送一个请求的计时器呢?十分钟后我的应用程序将被终止?如果是这样,每次我的计时器失效时,我都可以销毁并再次创建该后台任务。我错了吗?
    • 应用在后台时不会触发定时器。
    【解决方案2】:

    对于概念理解,请查看here

    准确率的详细分析可以访问this

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2011-09-15
      • 2013-02-04
      相关资源
      最近更新 更多