核心蓝牙恢复时序问题

时间:2015-03-26 08:21:16

标签: ios core-bluetooth

我以为我有整个蓝牙修复工作(作为中心),然后我尝试了以下内容:

1 - 外围设备每1秒发送一个蓝牙数据包
2 - 在随机时间,我杀了应用程序(使用调试器停止,或使用另一个应用程序来占用所有内存)
3 - 检查是否发生了恢复

大约80%的时间都有效,错误似乎是随机的。

两天后,我能够可靠地重现问题:

1 - 外围设备发送两个相隔1000毫秒的数据包
2 - 以编程方式杀死app(kill(getpid(),SIGKILL)在第一个数据包(100ms,200ms ...)之后的某个增量,这是下一个数据包之前的一些增量(900ms,800ms)
    | --PKT ------- ------ 850ms KILL - 150毫秒 - PKT-- |
3 - 第二个数据包到达并唤醒应用程序

我发现如果应用程序终止和下一个数据包到达之间的时间大于约150毫秒,则恢复将在100%的时间内进行。

如果应用程序终止和下一个数据包到达之间的时间小于约150毫秒,如果我在10秒内手动打开应用程序,则100%的时间都会进行恢复。如果我在超过10秒后手动打开应用程序,就好像没有进行恢复一样。此外,一旦应用程序被杀,我会在状态栏中看到蓝牙符号,并在10秒后连接被删除。

测试是在运行8.1然后8.2的iPhone 4上进行的。

这似乎是一个错误...如果有帮助我可以提供我的代码但是我已经将它剥离回最小的委托实现。我已经尝试将中央管理器放在不同的队列上无济于事。这对我的产品来说是一个真正的问题,因为它依赖于基于会话的背景蓝牙跟踪。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这似乎在iOS 9 +

中得到解决