私のシナリオは、サービスが定期的に情報 (ユーザーの場所など) を取得し、それをサーバーに報告し、場所が X の場所と一致する場合にプッシュ通知を受信するようにしたいと考えています。
アプリケーションが実行されているかどうかに関係なく、位置情報を定期的に取得するための最良のメカニズムについて、アドバイスを求めたいと思います。以下は、私が考えたオプションと、それぞれの背景情報です。
標準 Android サービスの作成
私が最初に考えたのは、位置情報の更新を取得し、位置情報を受信するとサーバーに送信する GoogleAPIClient を初期化する STICKY サービスを作成することでした。このアプローチの問題点は、位置情報を定期的に取得する必要があることです。そのため、ロケーション スキャンを実行していなくても、サービスは常に実行されます。また、サービス内で頻繁に場所をポーリングする最良の方法は何でしょうか?
IntentService でアラームを作成する
私が考えた 2 番目のオプションは、Alarm Manager を起動して、(GoogleAPIClient を介して) 位置情報の更新を開始する IntentService を開始することでした。場所が取得されたらサーバーに送信し、場所の更新を閉じます。これにより、位置情報の更新を定期的に開始/停止するという問題が解決されます。ただし、待機せずに IntentService 内で GoogleAPIClient に接続することはあまりうまくいきませんでした。これが最も効率的な方法だとは思いません。
GcmTaskService の作成
これには AlarmManager の多くの利点があり、電話機がメンテナンス モードのときにのみサービスを起動するため、居眠りモードの点でより効率的であるように思われるため、良い解決策のように思えました。ただし、GoogleAPIClient に接続して何らかの待機なしで位置情報を取得する IntentService と同じ問題があります。
私はこれについてうさぎの穴に行きすぎている可能性があり、私が見逃している明らかな何かがあるかもしれないので、アドバイスをいただければ幸いです.