如何在 iOS4 中选择性地启用后台处理

Posted

技术标签:

【中文标题】如何在 iOS4 中选择性地启用后台处理【英文标题】:How to selectively enable background processing in iOS4 【发布时间】:2011-09-20 22:17:51 【问题描述】:

我已成功为我的核心位置应用启用后台处理。为了确保我走在正确的轨道上,这里是我如何实现 ENTERING 后台模式的快速概述:

1:info.plist:添加键“必需的后台模式”,值为“应用程序注册以进行位置更新”

2:

- (void)applicationDidEnterBackground:(UIApplication *)application

    [self.locationManager stopUpdatingLocation];
    [self.locationManager startMonitoringSignificantLocationChanges];

退出后台模式时,我使用以下代码:

- (void)applicationWillEnterForeground:(UIApplication *)application

    self.locationManager.delegate = self;
    [self.locationManager stopMonitoringSignificantLocationChanges];
    [self.locationManager startUpdatingLocation];

这似乎运作良好,因为我在 iPhone 关闭时报告了位置。任何关于这种方法是否被视为“最佳实践”的建议都将不胜感激。

我担心的是,即使我的应用在 iPhone 上被明确终止,定位服务箭头仍会显示在状态栏上。

我的问题是:是否可以通过编程方式启用/禁用应用程序的后台处理?

我这样做的原因是,如果我的用户不想使用我的应用的位置感知部分,我想阻止应用在后台处理,即使它没有接收位置。

非常感谢您提供任何信息!


感谢您的及时答复。似乎正在发生的事情是,即使我发出了

[self.locationManager stopMonitoringSignificantLocationChanges];

[self.locationManager stopUpdatingLocation];

状态栏上的定位服务箭头一直亮着,即使我的应用程序已退出。我也强制终止了它,但箭头一直亮着。

我也没有其他应用程序以挂起的方式运行。我查看了 Settings > Location Services > MyApp 并看到 myApp 和内置的 Maps 应用程序都表明它们当前正在使用 Location Services,但是实际上两者都没有运行。

有人知道为什么会这样吗?难道是我的应用程序进入后台或终止时没有正确释放资源?

非常感谢所有答案。

【问题讨论】:

您的背景实现看起来不错,将被视为“最佳实践” 【参考方案1】:

您可以在 NSUserDefaults 中保存一个设置,并使用该设置来启用您的后台定位服务。

NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
someFlag = [defaults boolForKey:@"gpsOnOff"];

if (someFlag) 
   // enable background services

【讨论】:

比尔。我确实有一个打开/关闭位置服务的用户默认设置。我不知道您可以以编程方式打开/关闭实际的后台处理。我以为它只在 info.plist 中。有关如何在代码中执行此操作的任何建议?谢谢 您仍然需要手动编写代码,但是您可以将状态存储在用户默认值中,这样您就可以在 AppDel 或您需要确定是否使用 use 的任何其他位置轻松访问它位置。

以上是关于如何在 iOS4 中选择性地启用后台处理的主要内容,如果未能解决你的问题,请参考以下文章

React Native:如何选择性地启用 LayoutAnimation

如何使用burpsuite破解后台忘记的密码

如何在 Eclipse 中关闭 Javadoc 悬停(或有选择地启用它)?

如果 Python 可用,则选择性地启用测试程序 - automake

如何在WinForm应用程序中持续监视用户输入

在 iOS 4.2.1 中在后台即时处理网络事件