【发布时间】:2017-04-07 07:13:10
【问题描述】:
这是来自官方文档中的 iOS 应用程序的核心蓝牙后台处理部分:
在后台执行长期操作
某些应用可能需要使用 Core Bluetooth 框架来执行 后台的长期操作。例如,假设您是 为 iOS 设备开发一个家庭安全应用程序,以进行通信 带门锁(配备蓝牙低功耗技术)。这 app和锁交互,当用户使用时自动锁门 离开家并在用户返回时解锁门——同时 应用程序在后台。当用户离开家时,iOS 设备 最终可能会超出锁定范围,导致连接 到锁丢失。此时,应用程序可以简单地调用 connectPeripheral:options: CBCentralManager 类的方法,以及 因为连接请求不会超时,iOS 设备会 用户回家后重新连接。
好的,我们有一个应用程序可以适当地锁定/解锁门...正如所指出的,当应用程序处于后台时(很可能处于暂停模式),这可以工作。现在,让我们继续(引用文档):
现在假设用户离开家几天。如果应用程序 当用户离开时被系统终止,应用程序将不会 当用户回家时能够重新连接到锁,并且 用户可能无法解锁门。对于这样的应用程序,它是 能够继续使用 Core Bluetooth 执行的关键 长期操作,例如监控活动和未决连接。
所以,如果用户离开家几天,应用程序已经被 iOS 终止,我们将不得不执行状态保存和恢复,以便 iOS 在检测到连接请求时重新启动应用程序,并让应用程序来解锁门。相关引述:
在上述家庭安全应用的情况下,系统 将监控连接请求,并重新启动应用程序以 处理 centralManager:didConnectPeripheral: 委托回调时 用户回到家,连接请求完成。
这都是有道理的,但再次注意这部分:
现在假设用户离开家几天。如果应用程序 被系统终止当用户离开时,应用将无法在用户回家时重新连接到锁,并且 用户可能无法解锁门。对于这样的应用程序,它 对于能够继续使用 Core Bluetooth 执行 长期行动...
这是否意味着,如果应用程序在用户离家时的某个时刻被用户强行杀死,这是否也能正常工作?意思是当用户回到家时,无论如何门都会解锁,还是必须手动重新启动应用程序才能解锁?
我之所以这么问,是因为重新启动已终止的应用程序是如何工作的。用户杀掉应用和iOS杀掉支持后台执行的应用是不一样的:
支持后台执行的应用程序可能会被系统重新启动 处理传入事件。如果应用程序因任何原因被终止 除了用户强制退出之外,系统会启动应用程序 当以下事件之一发生时...
再一次,如果用户离开了几天并且他通过双击主页按钮并向上拖动关闭了应用程序,他是否能够在不手动重新启动应用程序的情况下进入他的家?
【问题讨论】:
标签: ios objective-c iphone bluetooth core-bluetooth