0

たとえば、1時間ごとにユーザーの場所をサーバーに更新するアプリケーション(サービス)を開発したいと思います。

Androidドキュメントから、「Androidサービス」を使用する必要があり、onStartCommand()

しかし、これらの場所の更新を1時間ごとに送信し続ける必要があるため、内部で無限ループを実行する必要がありますonStartCommand()...そうですか?

さて、私の質問は次のとおりです。

  • システムがサービスを強制終了した場合はどうなりますか?サービスが開始されることはわかっていますが、それonStartCommand()も呼び出されますか?

  • 場所の更新を実装するためのより良い方法はありますか?たとえば、システムがonStartCommand()1時間ごとに定期的にメソッドを呼び出すことは可能ですか?

4

3 に答える 3

2

考えられる1つの方法は、AlarmManagerをチェックアウトすることです。アプリを一定の間隔で実行するようにスケジュールできます。また、おそらく私が最後の1時間から変更しなかったと判断し、バッテリーの寿命を延ばすために遅延を長くすることもできます。

AlarmManagerドキュメント

于 2012-07-23T21:44:48.083 に答える
2

はい...AlarmManagerを検索します。まさにそれが必要です。インテントを呼び出すようにスケジュールして、1時間ごとにサービスを開始できます。

于 2012-07-23T21:48:24.893 に答える
2

他の投稿で言及されているように、 AlarmManagerはあなたが探しているものです。

ただし、「永遠に、1時間ごとに」実行することは、Androidのベストプラクティスに反します。「毎時、毎日」と考えることから始めると、ユーザーのバッテリー寿命を損なうような行動を取る可能性があります。

1時間ごとにGPSをオンにし、ロックを取得するのを待ってからオフにすると、場所を確認するときに「賢い」場合よりもはるかに長いバッテリー寿命を使用します。

setInexactRepeatingのように正しく行う場合は、WiFiロケーションを使用し、ロケーション更新のリスナーを設定してください。そうすれば、ケーキを手に入れて(ユーザーのバッテリー寿命を長く)、食べることもできます(必要な情報を取得できます)。

アプリがバッテリーを消費しすぎないようにする(そしてアンインストールされる可能性がある)ためのヒントについては、GOogle IO 2012の次の動画をご覧ください:http ://www.youtube.com/watch?v = PwC1OlJo5VM

編集:これも見てください:http: //developer.android.com/reference/android/location/LocationListener.html

デバイスの場所が変更されたときにのみ呼び出されるリスナーを設定できます。YMMVですが、見てください。

于 2012-07-23T22:01:30.010 に答える