バックグラウンドで人の位置を確認し、特定の場所にいるかどうかを確認し、サーバーにpingを送信できるアプリをセットアップしようとしています。ユーザーのエネルギーを消耗させたくないので、最善の解決策を見つけようとしています。
私はかなりの読書をしましたが、これらの方法に関する情報はあまり見つかりませんでした。私は今それらを理解しているので、長所と短所を見ていきます
startMonitoringForSignificantChanges
説明: Wi-Fi と携帯電話基地局の変更に基づいて、システムがアプリを起動します。
アプリは、デバイスが前回の通知から 500 メートル以上移動するとすぐに通知を期待できます。5 分に 1 回以上の頻度で通知を期待するべきではありません。デバイスがネットワークからデータを取得できる場合、ロケーション マネージャーはタイムリーに通知を配信する可能性が高くなります。
長所:
- 最もバッテリー効率が良い
短所:
- Wi-Fi/セルタワーの変更に依存
- これは 200m から 2km ごとに呼び出されると想定することしかできません (特定の地域ではそれ以上ではない場合)。
- 精度の詳細
- したがって、一貫性がなく、不正確です
10 分起動更新または「n 分更新」:
説明: これは基本的に、アプリに追加の時間を要求します。その延長時間が切れそうになると、アプリは [self.locationManager startUpdating] を呼び出し、場所を取得して、バックグラウンド スレッドをさらに 10 分間延長します。
長所:
- 一貫性のある
- 必要なだけ正確にすることができます 必要なだけ一貫性を保つことができます
短所:
- アプリをバックグラウンドで実行し続けるために、10 分以下ごとに呼び出しを行う必要があります (つまり、呼び出しの n を 10 より大きくすることはできません)。
質問: これはバッテリーにどのような影響を与えますか? GPS をウェイクアップしてオフにすると、バッテリーにさらにダメージを与えますか? バックグラウンドで簡単な位置チェックを実行すると、バッテリーがそれほど消耗するとは想像もできませんでした... しかし、やはり、GPS の電源を入れて使用可能な信号を取得する方法がわかりません。
startMonitoringForRegion (ジオフェンシング):
簡単に言えば、事前定義された領域に入るとアプリが起動します。これはそれらの奇妙なものであり、より最近のものであり、ドキュメントが少なくなっています。「システムが境界通過を監視する」方法についての適切な説明が見つかりません。私が知っているのは、それが本当にスマートなアルゴリズムであるか、GPS に常に ping を送信しているため、これを行うための他の方法よりも効果的ではありません.
長所:
- 簡単な実装
- システムによって管理されるため、独自のアドホック ジオフェンスを発明する必要はありません 境界を越えたときにのみトリガーされます...バッテリー ヒットと引き換えに不要なデータを捨てる必要はありません
- したがって、この種のものに最適で、正確で、システムによって管理されている必要があります
短所:
- 人々はその有効性に疑問を抱いています
- それがバッテリーの寿命に良いかどうか、またはバッテリーの寿命をひどく消耗するかどうかについて、大きな対立があります。
- システムはこれをどのように監視していますか!?
- 基本的に、不確定な動作。
私の質問は、バッテリーの寿命、一貫性、および精度に関して、バックグラウンドでユーザーの位置をテストするこれらの他の方法と比較して、startMonitoringForRegion がどのように機能するかということに要約されると思います。誰かがこれを徹底的にテストしましたか? または、アプリで使用して、少なくともいくつかのフィードバックを得ましたか? おそらく、私の目的では、トレードオフはジオフェンシングと 10 分間の更新方法の間です。(また、Apple が iOS7 について公に述べていることを考えると、いくつかのバックグラウンド タスクが存在することになります...これにより、これら 2 つの方法のトレードオフの計算が変わるでしょうか?) これら 2 つの方法を比較する方法を知っている人はいますか?
本当にありがとう!これらの方法を比較する方法の根底に到達できるかどうかを楽しみにしています.