2

フォアグラウンドとバックグラウンドで動作し、位置データを送信する必要があるアプリに取り組んでいます。私はまだコードを記述しておらず、CoreLocationがどのように機能してどのアプローチに従うかを決定する方法に精通しています。私がこれまでに行った読書から、私はそれを収集します:

  1. startMonitoringSignificantLocationChangesを使用

    • GPSがアクティブになることはありません
    • 電波塔の変更が検出された場合にのみ、didUpdateLocations(またはios <6の場合はdidUpdateToLocation)を呼び出します。
    • 必要なAccuracyプロパティとdistanceFilterプロパティはどちらも無視されます
  2. startUpdatingLocationを使用

    • バッテリーの消耗が多い
    • didUpdateLocationsは、電話のハードウェアに提供するデータがある場合は常に呼び出されます。また、位置情報(GPS、ラジオ、wifi)に使用できるハードウェアコンポーネントが複数あるため、didUpdateLocationsが呼び出されるタイミングや頻度、または新しい読み取り値が以前の読み取り値よりも正確であるかどうかは保証されません。
    • 最初の数字はGPSに依存していないため、通常は不良です。
    • 私たちがこれまでに得た最高の場所を持っているかどうかを知る確実な方法はありません。それは、利用可能な特定の時間枠で最高の精度で受け取ったすべての場所の中から選ぶだけの問題です。

ただし、中間ルートに関する議論やドキュメントはあまりありません。パワーを意識したいが、ユーザーが大幅に移動したときに適度に正確なデータを取得したい場合はどうなりますか?考えられる妥協案は次のとおりです。

  • startMonitoringSignificantLocationChangesをオンにします
  • didUpdateLocationsが呼び出されたときにstartUpdatingLocationを使用するように切り替えます
  • しばらく待って、GPSにいくつかの良い測定値を取得する機会を与え、最高の精度で1つを選択します
  • startMonitoringSignificantLocationChangesなどの使用に切り替えます...

私の知る限り、このアプローチはフォアグラウンドとバックグラウンドで同じように機能し、Appleがサポートする2つの標準的なアプローチの間である程度の妥協点を提供します。

質問:
-私の理解は正しく、私の「妥協」アプローチは正しいですか?
-誰かがそのアプローチをうまく使用しましたか?
-そのアプローチで探すべき注意点は何ですか?
-そこにもっと良い妥協のアプローチはありますか?

PS:後で、推定移動速度を考慮してアプローチを改良し、人が移動しているときにGPSを常に使用しないようにすることができると思います。

4

1 に答える 1

0

この問題に対処するにはさまざまな方法があり、このバッテリーを意識したコードをどの程度複雑にするかによって異なります。最も単純な解決策は、明らかに常に GPS を使用することですが、x 時間ごとにサンプルを取得し、最も正確なものを見つけ、次のサンプルまでの時間内にユーザーがどこにいるのかを予測するなど、非常に複雑になる可能性があります。以前のサンプルなどを使用して

  • 妥協のアイデアは問題ありませんが、ユーザーにアプリをどれだけ使用してもらいたいか、アプリを実行する期間、必要なデータの精度を考慮に入れる必要があります。最終的には、GPS と大まかなデータの最適な組み合わせを見つけるための試行錯誤が必要になります。重要な変更は頻繁には発生しないことを知っておく必要がありますが、明らかにそれは相対的なものです。アプリが時速 60 マイルで車を運転しているユーザーに依存している場合、それほど時間はかからないかもしれませんが、誰かが歩き回っている場合は、大幅な変更をトリガーするのに (もしあったとしても) はるかに長い時間がかかる可能性があります。
  • 個人的にはこのアプローチを使用したことはありませんが、CoreLocation を使用して作成したすべてのアプリでは、非常に正確な位置データが短期間必要になります。
  • このアプローチの注意点は、多くの試行錯誤が必要であり、アプリのパフォーマンスが低下する可能性があることです。これをコーディングする前に、この作業に費やした時間が最終的に報われるかどうかを判断する必要があります。さらに、サンプルに基づいてユーザーが移動している場所を特定する場合は、実際にバッテリーを節約できるかどうかを判断する必要があります。そのような計算は、バッテリーに関してかなり高価になる可能性があります。
  • 正直なところ、CoreLocation はそれほど大きなバッテリーを消費するわけではなく、Apple はそのエネルギー使用量を常に改善しています。たとえば、Moves for iOS を見てください。ユーザーとしては、バッテリーの影響はほとんどなく、24 時間 365 日常に私の位置情報を使用していると言えます。

私が間違っていなければ、Instruments を使用するとバッテリーの使用状況を監視できるので、試行錯誤を支援するために妥協することにした場合は、それを使用できます。

これが役に立ったことを願っています!

于 2013-02-26T00:55:31.957 に答える