如何在 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
如何在 Eclipse 中关闭 Javadoc 悬停(或有选择地启用它)?