0

心拍数デバイスをアプリに接続しており、さまざまなシナリオで心拍数が失われることを懸念しています。

アプリがフォアグラウンドにあるときは、心拍数をストリーミングしてサードパーティのデータベースに保存しています。それは簡単な部分です。

ユーザーがワークアウト中などにアプリがバックグラウンドになり、心拍数がまだストリーミングされていると、事態は複雑になります。ファイル システムが暗号化されるため、データベースに書き込むことができないため、心拍数をテキスト ファイルに追加し、アプリがフォアグラウンドに戻ったときにそれらをデータベースに取り込むことを考えています。

心拍数は 1 秒に 1 回であるため、さらに複雑になり、アプリが戻ってくるまでに何万回も発生する可能性があります。それらをテキストファイルに追加するのではなく、心拍数を示すファイル名を作成し、ファイル名と作成日からデータを導出することを考えています。そうすれば、ファイルを開く必要はありません。メタデータを読み取り、データベースに読み取られたときにファイルを削除するだけです。

このような一見単​​純な作業は、さらに複雑になります。Core Bluetooth に対処し、接続を開いたままにする必要がありますが、iOS がアプリが心拍数デバイスを無期限にリッスンできるとは想像できません。ある時点でアプリは終了しますが、心拍数ストリームはどうなりますか?

バックグラウンドでストリーミング心拍数を無期限に処理する実証済みの方法はありますか? どんなアドバイスや経験も大歓迎です!

4

1 に答える 1

2

ブルートゥース

iOS は、バックグラウンド モードでの特定の種類のアプリの実行をサポートしています。このモードの間、Bluetooth 接続は維持されます。心拍数モニターは、開発者向けドキュメントで言及されているアプリの種類の 1 つです。

このサポートは、心拍数モニターなど、定期的にデータを送信する一部の種類のアクセサリにとって重要です。Xcode プロジェクトの [機能] タブの [バックグラウンド モード] セクションから、外部アクセサリ通信のサポートを有効にします。このモードを有効にすると、外部アクセサリ フレームワークはアクセサリとのアクティブなセッションを閉じません

iOS プログラミング ガイドの「バックグラウンド実行」セクションを参照してください。

データロギング

ログ レコードを個別のファイル ノードとして格納すると、パフォーマンスが低下する可能性があります。理想的には、アプリがバックグラウンド モードで実行されている間にデータベースに書き込めるようにする必要があります。

もう 1 つのオプションは、サンプルをテキスト ファイルに追加し、ファイルを 1 行ずつ読み取り、データベースにインポートすることです。ログに単一のファイルを使用することは、何千もの個別のファイルよりも効率的です。ファイルのサイズが気になる場合、ファイルを分割する簡単な方法は、現在の日付と時刻をファイル名として使用することです。例: 「年-月-日-時-分」の形式では、1 分ごとに新しいファイルが作成され、各ファイルは一意になります。

複数のプロセスがファイルに書き込む場合 (たとえば、ファイルが共有アプリ コンテナーにある場合)、 を使用しNSFileCoordinatorて競合状態を防ぎ、ファイルの整合性を確保できます。

ディスク保護を使用している場合は、ログ ファイル (またはデータベース) のファイル保護モードを変更して、確実に書き込みできるようにする必要があります。でファイル保護モードを「なし」に設定しますNSFileManager.defaultManager().setAttributes(:ofItemAtPath)

iOS プログラミング ガイドのプライバシー戦略セクションを参照してください。

于 2016-07-03T17:00:47.820 に答える