为什么我的应用程序因内存压力而终止后不再收到信标通知?

时间:2014-02-11 21:26:54

标签: ios objective-c ios7 ibeacon

我的公司开发了一个iBeacon实用程序,可以作为信标发送器或接收器(不是两者兼而有之,纯粹为了简单起见。)

它注册了蓝牙中央和蓝牙 - 外设背景模式,当它处于信标接收器模式时,它同时使用startMonitoringForRegion和startRangingBeaconsInRegion。

当应用程序在后台时,即使设备被锁定,我也会在后台被唤醒,并能够触发本地通知或播放声音。

我之前测试了它并强制低内存终止(只需从Xcode运行我的应用程序,然后在应用程序之后启动应用程序,直到我在控制台中看到应用程序已被终止染色到内存压力的消息。)

然而,今天我只是再试一次,尽管等了一个多小时,如果我的应用程序因为内存压力而在收听新的信标区域时终止,当信标再次开始传输时,我不再重新启动。当应用程序位于前台和后台时,我确保信标触发了didEnterRegion。

我还通过从跳板(而不是Xcode)启动应用程序并启动了几十个重量级应用程序来测试它,直到我对我的应用程序已被终止非常有信心,并且在这种情况下我没有重新启动信标通知任

自从我第一次开始测试以来,我不记得获得iOS更新,但似乎系统行为在过去几周内发生了变化。我没有具体说明我何时测试它以及我使用的操作系统版本,但它确实看起来像以前工作的东西不再有效。

我对应用程序进行了各种更改,以便为分发做好准备,但不会影响此行为。当系统检测到我因为内存压力(非用户终止)而被终止时我正在主动监控的信标时,是否有其他人对我的应用程序停止重新启动的原因有任何想法。

1 个答案:

答案 0 :(得分:0)

您是否在iOS 7.1上进行了测试?在iOS 7.0.x中,您的应用必须至少在后台运行才能收听信标。强制退出应用程序将终止连接。在7.1中,您应该发现问题已得到解决。即使重新启动设备也不会在7.1中终止连接。

如果您想继续支持7.0.x,则必须找到创造性的方法,让用户在后台遇到应用时让他们打开您的应用。例如,您可以定期轮询服务器并在连接失败时发送推送通知。