AppDelegate 代码仅在后台运行
Posted
技术标签:
【中文标题】AppDelegate 代码仅在后台运行【英文标题】:AppDelegate code only runs on Background 【发布时间】:2014-08-16 11:41:49 【问题描述】:我正在开发一个使用 CoreLocation 来管理 iBeacons 的 ios 应用。我在 AppDelegate 和 ViewController 中都有 Beacon 检测,但我希望 AppDelegate 检测仅在应用程序处于后台状态时工作。当用户进入或离开区域时,我会向服务器发送分析数据,因此如果应用程序处于前台时(AppDelegate 和 ViewController)检测都有效,则应用程序将发送双倍分析数据。
当应用程序处于前台时,是否有任何解决方案可以使代码(发送分析的服务器调用)不运行?
【问题讨论】:
我建议您只有一个类(另一个单例或作为您的应用程序委托的属性引用)来处理您的位置检测。您可以使用 UIApplication 对象的applicationState
属性来确定您是在后台还是前台。
【参考方案1】:
在 AppDelegate 中,在 applicationDidEnterBackground: 方法中启动信标检测,并在 applicationWillEnterForeground: 方法中停止信标检测。
【讨论】:
【参考方案2】:只需在您的 AppDelegate 中实现方法来跟踪您是否在前台,如果是,请停止从您的 AppDelegate 发送分析数据。见下文:
- (void)applicationDidEnterBackground:(UIApplication *)application
_sendAnalytics = YES;
- (void)applicationWillEnterForeground:(UIApplication *)application
_sendAnalytics = NO;
然后在从 AppDelegate 发送分析数据之前添加一个 if 语句来检查 _sendAnalytics 的值。
按照@paulw11 在他的评论中所建议的那样集中这个逻辑可能会使代码更简洁,但如果您确实需要在两个地方发送分析,以上将解决您的问题。
【讨论】:
以上是关于AppDelegate 代码仅在后台运行的主要内容,如果未能解决你的问题,请参考以下文章
当 Healthkit 在后台唤醒我的应用程序时,AppDelegate 是不是会初始化?
当 Healthkit 在后台唤醒我的应用程序时,AppDelegate 是不是会初始化?