应用程序在后台崩溃,而蓝牙连接长时间丢失
Posted
技术标签:
【中文标题】应用程序在后台崩溃,而蓝牙连接长时间丢失【英文标题】:App crashes in background while bluetooth connection lost for long time 【发布时间】:2013-09-11 13:19:46 【问题描述】:我正在开发一个与蓝牙低功耗设备通信的应用程序。我在 UI 中显示心率。当蓝牙连接时,它在前景和背景中都可以正常工作。但我的问题是,当应用程序处于后台时,蓝牙设备的连接丢失时间更长,我的应用程序崩溃了。将崩溃报告显示为:
MyApp[565] has active assertions beyond permitted time:
【问题讨论】:
请添加整个错误消息以供将来参考。 【参考方案1】:Core 蓝牙后台通信必须通过特征更改通知或指示来实现。在被带到后台后,您让应用程序运行太久,而 ios 正在强行杀死它。我想您正在使用beginBackgroundTaskWithExpirationHandler:
方法来保持一些计时器运行。这在很长一段时间内都不起作用。限制为 10 分钟左右,但也可能取决于其他因素。
Core Bluetooth Programming Guide 包含一个关于如何处理背景的非常简洁的描述。实际上,您的应用需要订阅心率特征的通知或指示,并仅在回调发生时对其做出反应。只有当应用程序正在执行一些不可中断的任务时,应用程序才应在后台保持运行,例如不可恢复的网络操作。
【讨论】:
【参考方案2】:我假设您使用的是 iOS 6.1
您是否使用 CBCentralManager 的以下委托方法处理设备断开连接
– centralManager:didDisconnectPeripheral:error:
– centralManager:didFailToConnectPeripheral:error:
我也怀疑在后台时没有设备发现,所以您可能必须在代码中处理该逻辑
【讨论】:
是的,我正在开发 iOS 6.1 和 iOS 7 beta 6。我使用这些委托方法断开连接。你能建议我使用什么样的逻辑来让我的应用程序在后台运行吗? 为了让应用程序在后台保持活跃,您需要将以下设置添加到项目 bluetooth-central 或 bluetooth-peripheral 的 info.plist 中的 UIBackgroundModes 中,文档中非常清楚地提到了以上是关于应用程序在后台崩溃,而蓝牙连接长时间丢失的主要内容,如果未能解决你的问题,请参考以下文章