0

ユーザーの位置を継続的に記録しているアプリがあります。位置情報の更新は、ユーザーがたどったルートの正確なマッピングを取得するために非常に頻繁に行われます。電話がスリープ状態になったときにアプリケーションがジオポイントを記録し続けるために、ユーザーが記録を停止したとき、またはで記録を停止したときに解放されるウェイクロックを使用しonDestroy()ます。

ロケーションマネージャからロケーションリスナーを削除していないことに気付きました。これにより、ユーザーがアプリケーションをリースする前に「記録ルートの停止」ボタンを押すのを忘れた場合、バッテリーが消耗します。onPause()私の最初の考えはそれを取り除くことでしたonPause()が、ウェイクロックがありますが(画面はオンではありません)、画面がオフになると呼び出される可能性があります。

この件に関する私の質問は次のとおりです。ロケーションマネージャからロケーションリスナーをいつ削除する必要がありますか?リスナーを解放する必要がありonDestroy()ますか?または、ロケーションマネージャーの話を聞いている限り、ウェイクロックはまったく必要ありませんか?もしそうなら、これはどのように扱われるべきですか?

私はこれがここのような他の場所で議論されているのを見ました: Android-LocationManager.requestLocationUpdatesを使用するとき、私はWakeLockが必要ですか?

しかし、絶対的な答えはないようです。

4

1 に答える 1

1

ソリューションに関連する場所を取得する頻度については言及していません。

取得頻度

5 分に 1 回を超える頻度で位置情報を取得したい場合は、リスナーを登録したままにしておくことをお勧めします。GPS デバイスは、取得の間に省エネ モードに入るはずです。

頻度がそれよりも小さい場合は、アプリケーションの設計に応じて、場所を取得した後にリスターを削除し、タイマー タスクまたはアラーム マネージャーを使用して再登録することを検討できます。

ウェイクロック

私は自分で試したことはありませんが、誰もスリープ状態を維持するように要求しなければ、Android はしばらくの間ユーザーの操作がないとスリープ モードになると予想されます。リスナーを登録しても変わらないはずです。

アプリケーションのアーキテクチャ

onPause()onStop()他のアクティビティがアクティビティ画面を部分的または完全に覆っているときに呼び出されます。そのため、継続的に録音を続けたい場合、これはリスナーの登録を解除するのに適した場所ではありません。また、ユーザーがアプリケーションを離れた場合、記録は停止します。

取得の間隔が短い場合は、サービスを使用して場所を記録するか、 を使用して取得AlarmManager頻度の低いスケジュールを設定することをお勧めします。

于 2012-10-18T00:40:14.543 に答える