0

我有一个连接到我的应用程序的心率设备,并且担心在不同情况下会丢失心率。

当应用程序在前台时,我正在流式传输心率并将它们存储在第 3 方数据库中。那是容易的部分。

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

它仍然变得更加复杂,因为心率是每秒一次,所以在应用程序返回之前可能有数万次。我在考虑不是将它们附加到文本文件中,而是创建指示心率数的文件名并从文件名和创建日期中获取数据。这样,我永远不必打开文件。我只需要读取它的元数据并在读入数据库时​​删除文件。

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

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

4

1 回答 1

2

蓝牙

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

这种支持对于定期传输数据的某些类型的配件非常重要,例如心率监测器。您可以从 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用对外部附件通信的支持。当您启用此模式时,外部附件框架不会关闭与附件的活动会话

请参阅iOS 编程指南中的后台执行部分。

数据记录

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

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

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

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

请参阅 iOS 编程指南的隐私策略部分。

于 2016-07-03T17:00:47.820 回答