无限期地在背景中流动心率?

时间:2016-07-03 15:20:22

标签: ios swift core-bluetooth heartbeat background-foreground

我的心率设备连接到我的应用程序,并担心在不同的情况下失去心率。

当应用程序位于前台时,我会将心率流式传输并存储在第三方数据库中。这很容易。

当应用程序进入后台而用户正在运行时,事情变得复杂,并且心率仍在流式传输。文件系统变得加密,因此我无法写入数据库,因此我的想法是将心率附加到文本文件,然后在应用程序返回到前台时将它们拉入数据库。

它仍然变得更加复杂,因为心率是每秒一次,因此在应用程序恢复之前可能会有数万。我正在考虑而不是将它们附加到文本文件中,只是创建指示心率编号的文件名,并从文件名和创建日期派生数据。这样,我就不用打开文件了。我只需阅读它的元数据并在读入数据库时​​删除该文件。

对于这样一个看似简单的任务,它变得更加复杂。我必须处理核心蓝牙并确保它保持连接打开,但我无法想象iOS将允许该应用无限期地收听心率设备。在某些时候,应用程序将终止,但心率流会发生什么?

是否有经过验证的方法可以无限期地在后台处理流媒体心率?任何建议或经验将不胜感激!

1 个答案:

答案 0 :(得分:2)

<强>蓝牙

iOS支持在后台模式下运行某些类型的应用。在此模式下,将保持蓝牙连接。心率监视器是开发人员文档中提到的应用程序类型之一:

  

这种支持对于某些类型的配件非常重要   定期数据,例如心率监视器。你启用   支持来自后台模式的外部附件通信   Xcode项目中Capabilities选项卡的一部分。当你   启用此模式后,外部附件框架不会关闭   与配件的积极会议

请参阅iOS编程指南中的Background Execution部分。

数据记录

将日志记录存储为单个文件节点可能会导致性能下降。理想情况下,当应用程序在后台模式下运行时,您应该能够写入数据库。

另一种选择是将样本附加到文本文件,然后逐行读取文件并将其导入数据库。使用单个文件进行日志记录比数千个单独文件更有效。如果您担心文件的大小,分割文件的一种简单方法是使用当前日期和时间作为文件名。例如:格式'year-month-day-hour-minutes'将为每分钟创建一个新文件,每个文件都是唯一的。

如果多个进程写入文件(例如,如果文件位于共享应用程序容器中),则可以使用NSFileCoordinator来防止竞争条件并确保文件的完整性。

如果使用磁盘保护,则可能需要更改日志文件(或数据库)的文件保护模式,以确保可以写入。使用NSFileManager.defaultManager().setAttributes(:ofItemAtPath)将文件保护模式设置为“none”。

请参阅iOS编程指南的Privacy Strategies部分。