Bluetooth Low Energy を使用するアプリを開発していると、iOS デバイスが周辺機器との接続を失うことがあります。(時には何時間も。)
既存の周辺機器に再接続するには、アプリがバックグラウンドで実行されている場合でも、アプリは 1 日を通して特定の速度でバックグラウンドで常にスキャンする必要があります。
問題は、メモリの制約などにより、iOS がアプリが強制終了されないことを保証しないことです。
iPhone OS プログラミング ガイドに記載されている情報には、次のように記載されています。
Bluetooth 周辺機器で動作するアプリは、アプリが中断されたときに周辺機器が更新を配信する場合、起動するように要求できます。このサポートは、Bluetooth 心拍数ベルトなど、定期的にデータを送信する Bluetooth-le アクセサリにとって重要です。アプリの Info.plist ファイルに bluetooth-central 値を持つ UIBackgroundModes キーが含まれている場合、Core Bluetooth フレームワークは、対応する周辺機器のアクティブなセッションを開いたままにします。さらに、周辺機器から新しいデータが到着すると、システムはアプリを起動して、データを処理できるようにします。また、システムはアプリを起動して、アクセサリの接続と切断の通知を処理します。
電話がデバイスに接続されていて、アプリケーションがバックグラウンドである場合、問題は発生しません。ただし、デバイスが切断され、アプリがバックグラウンドになっている場合に発生します。この特定のケースでは、電話機が周辺機器に接続されていないため、通知を受信できなくなります。
これについては、Stack Overflow または Apple フォーラムで多くの人が以前に議論しており、Apple 開発者の 1 人が次のように答えていると思います。
私たちはこの問題を認識しており、解決策を見つけようとしています。現在、回避策はありません。」
私の質問は、メモリの制約のために iOS によって強制終了されない可能性を少なくとも改善する方法はありますか?
たとえば、インスタント メッセージング アプリ (IMO) はバックグラウンドで非常にうまく動作しているようです。何日も使用されていないと、アプリが起動し、gChat メッセージが表示されます。
などを質問しています。
- 強い指針
- 全体のメモリサイズ
- アプリがバックグラウンドまたは最小化されているときのメモリ サイズの削減
- バックグラウンド操作の頻度を減らす
- 等。