CoreBluetooth后台执行10秒?

问题描述:

因为苹果文档是关于this point相当模糊:CoreBluetooth后台执行10秒?

Upon being woken up, an app has around 10 seconds to complete a task 

这是否意味着,10秒后,应用程序将回到它的“暂停”状态?从理论上讲,在这10秒之后,是否可以“强制”应用程序保持清醒状态? (私人应用程序)。

在我的情况下,该设备将连接到汽车。

这是否意味着10秒后应用程序将返回到其“暂停”状态的 ?

如果你仔细阅读:

一旦被唤醒,应用程序有大约10秒的处理 数据。理想情况下,它应该尽可能快地处理数据,并且允许其自身再次被暂停。但是,如果需要更多时间,该应用可以使用beginBackgroundTaskWithExpirationHandler:方法 来请求额外的时间;它应该这样做只有当绝对 必要时,虽然。

应用程序通常由背景模式(如位置服务,音频,推送通知等)清醒和像位置服务一些模式中,直到所述位置数据正被捕获它将保持清醒,对于一些,这不是”不要像推送通知一样保持清醒。所以这取决于正在执行的任务。对于蓝牙,如果它与另一个蓝牙设备连接,则它将保持清醒状态。

从理论上说,是否有可能在这10秒之后“强制”应用程序保持清醒状态,然后 ? (私人应用程序)。

是的,这是可能的。

上述模式中的每让系统知道你的应用程序应该 被唤醒,或者在适当的时候推出相关 事件作出响应。例如,在开始播放音乐,然后一个应用程序移到 到后台仍然需要执行时间,以填补音频输出 缓冲区。启用音频模式告诉系统框架,他们 应继续 适当的时间间隔进行必要的回调到应用程序。如果应用程序不选择此模式,任何音频 正在播放或应用程序记录停止时,应用程序移动到 背景。

注意:如果您需要它为您的私人应用程序,那么你可以检查这个here。如果您添加解决方案并申请AppStore,则您的应用将被拒绝。

+0

从我的测试来看,即使请求这样,iOS也不会让你运行超过10秒。我会牢记这一点。 – Anton

试试这个:

[[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 

在Xcode,去你的项目 - > Capabilities->背景模式并标记背景模式为开。马克还采用了蓝牙LE配件:

与蓝牙外设工作

enter image description here

应用程序可以要求被唤醒,如果当应用程序被暂停 外设提供了一个更新。这种支持对于定期发送数据的蓝牙-LE配件来说非常重要,例如蓝牙心率带,其数据传输速率为 。您启用 支持使用Xcode项目中Capabilities选项卡背景模式 部分的蓝牙配件。 (您还可以通过在您的应用程序的Info.plist文件中包含带有 蓝牙*值的UIBackgroundModes密钥来启用此支持。)当您启用此模式时,核心蓝牙框架将保持打开任何活动的 会话以用于对应的外设。此外,从外设到达的新数据 会导致系统唤醒应用程序,以便它可以处理数据。系统还会将应用程序唤醒以处理配件连接和断开通知。

有关更多详细信息,请参阅Apple documentation

+0

谢谢你的回答@Sunil夏尔马。目前这个例子与一个发送数据的附件有关,例如心脏监测器,我忘记了它的精确度,但在我的情况下,该设备将与汽车连接。这仍然有效?而且doc会提醒应用程序,但它也比我们有10秒的窗口处理事件的精确度,在这10秒之后,应用程序又回到暂停状态? –

+0

是的,它仍然可以工作,你只需要在背景模式下选择**外部配件通讯**。 –