2

我正在开发一个与蓝牙低功耗设备通信的应用程序。我在 UI 中显示心率。当蓝牙连接时,它在前景和背景中都可以正常工作。但我的问题是,当应用程序处于后台时,蓝牙设备的连接丢失时间更长,我的应用程序崩溃了。将崩溃报告显示为:

MyApp[565] has active assertions beyond permitted time: 
4

2 回答 2

1

核心蓝牙后台通信必须通过特征更改通知或指示来实现。在被带到后台后,您让应用程序运行太久,而 iOS 正在强行杀死它。我想您正在使用该beginBackgroundTaskWithExpirationHandler:方法来保持一些计时器运行。这在很长一段时间内都不起作用。限制约为 10 分钟,但也可能取决于其他因素。

核心蓝牙编程指南包含一个关于如何处理后台的非常简洁的描述。实际上,您的应用需要订阅心率特征的通知或指示,并仅在回调发生时对其做出反应。只有在执行某些不可中断的任务(例如不可恢复的网络操作)时,应用程序才应在后台运行时继续运行。

于 2013-09-12T09:49:31.823 回答
0

i am assuming that you are on iOS 6.1

Are you handling device disconnect using the following delegate methods of CBCentralManager

– centralManager:didDisconnectPeripheral:error:
– centralManager:didFailToConnectPeripheral:error:

also i suspect there is no device discovery when in background, so you might have to handle that logic in your code

于 2013-09-12T07:48:40.950 回答