Core Bluetooth Background Processing for iOS Apps
ios蓝牙应用的后台处理
对于ios应用,你必须要清楚它是在前台运行,还是在后台运行。因为资源有限,你要对这两种模式区别处理。
默认情况下,当应用进入后台或挂起时,蓝牙任务是不执行的。但是,你可以把应用声明为支持蓝牙后台执行模式,这样当有蓝牙相关事件发生时,你的应用就可以被唤醒来处理任务。即使你的应用不要求后台处理支持,当有重要的事件发生时,系统仍然可能跳出警告,要求处理。
即使你的应用支持一种或两种都支持后台执行模式,也不是就一定能永远执行。在某些情况下,系统可能终止你的应用以便为前台应用让出内存,这将导致当前活动和连接等信息丢失。自ios7之后,蓝牙库支持保存状态信息,并可在下次启动app时还原状态信息。你可以通过这个特性来实现长连接。
Foreground-Only Apps
只支持前台运行的应用
大部分的apps,除非你要求后台运行,在进入后台后,应用会很快被挂起。在挂起状态下,应用无法处理蓝牙相关任务,无法接收蓝牙事件。直到重新回到前台。
在central端,只支持前台运行的应用,在进入后台或被挂起时就无法扫描和发现peripheral的广播包。如果是在peripheral端,广播将停止,任何central想访问characteristic的值都将收到异常信息。
不同情况下,默认的行为可能会影响你的程序。比如,在你与peripheral交互数据时,应用挂起(比如用户切到另一个应用)。这时连接可能会断开,你并不会收到通知,直到应用重新激活。
Take Advantage of Peripheral Connection Options
利用peripheral连接选项
只支持前台的蓝牙应用在挂起后发生的蓝牙事件会被系统排队,并在应用进入前台时把事件发给应用。当特定的central事件发生时,蓝牙库可以提供一种方式来提示用户。用户可以根据这些提示来决定是否激活应用。
若想利用使用这些提示,你需要在调用connectPeripheral:options: 方法时传入如下参数。
CBConnectPeripheralOptionNotifyOnConnectionKey: 在应用挂起后,与指定的peripheral成功建立连接,则发出通知
CBConnectPeripheralOptionNotifyOnDisconnectionKey: 在应用挂起后,如果与指定的peripheral断开连接,则发出通知
CBConnectPeripheralOptionNotifyOnNotificationKey: 在应用挂起后,指定的peripheral有任何通知都进行提示
Core Bluetooth Background Execution Modes
后台执行模式
如果你的应用在后台时也需要