1

这是什么意思?

在此处输入图像描述

我编写了一个已注册特定 iBeacon 区域监控的应用程序。我运行该应用程序一次,以便它可以向 iOS 注册监视但是,一旦我终止该应用程序并尝试对其进行测试(测试进入信标接近时应用程序是否由 iOS 启动

我注意到应用程序有时会被 iOS 成功唤醒(我添加了一个 UILocalNotification ,当应用程序被唤醒时触发,选项键等于UIApplicationLaunchOptionsLocationKey。我选择了进入时通知并在退出时通知监控首选项。

但是,当我关闭信标并双击主页按钮时,它会显示上图。当信标打开但没有触发通知时,它会保持这种状态很长一段时间。它有时会触发通知(但并非总是如此)。

为什么 iOS 会继续向我展示应用程序,即使它显然没有启动?是否保证应用程序在进入信标区域时始终启动?(我等了很长的 20 分钟.. 有时我会一起收到过去日期的通知.. 例如 30 分钟后,我会收到截止日期为 30 分钟前的通知...)

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
    [[DebugNotificationHandler sharedHandler] triggerMessage:@"AppDelegate: Triggered following iBeacon range"];
4

1 回答 1

1

iOS 上的位置监控(包括信标监控)在应用程序未运行时也可以工作。这就是让 iOS 在进入/退出事件发生时唤醒或重新启动您的应用程序的原因。

将信标监控视为“在后台”发生的事情是一种常见的误解/简化,但实际上并非如此。您的应用程序仍然像任何其他应用程序一样被暂停(使用后台模式的应用程序除外),并且容易由于内存压力而被终止。是 iOS 本身不断扫描进入/退出,如果它们发生,则将它们传送到您的应用程序。

一个副作用是,即使您终止应用程序,基于位置的应用程序建议(如您正在观察的应用程序切换器上的建议,但锁定屏幕上还有一个图标)仍然有效。

要记住的另一件事是,iOS 只会在信标状态更改时重新启动您的应用程序。例如,如果您在运行应用程序的信标范围内,然后终止应用程序,则应用程序切换器的底部栏仍然存在,因为您仍在信标范围内,但应用程序将只有在超出范围时才会重新启动。

最后但并非最不重要的一点是,退出事件具有 30 秒的内置延迟,即,您需要在信标范围之外至少 30 秒,iOS 才能将新状态注册为“信标范围之外”。如果您关闭信标,然后在几秒钟后将其打开,则不会注册任何状态更改,因此您的应用将不会重新启动。

于 2015-11-11T10:56:30.367 回答