2012-01-25 10 views
0

私は、ユーザージオロケーションをキャプチャしている舞台裏で連続して実行する必要のあるサービス(ウォークロック付き)を持っています。 ServiceLocationListenerのメソッド(つまりonLocationChanged())を実装しています。Android GPSサービスの問題

しかし、onLocationChanged()が電話から呼び出されるまでには時間がかかります。その間に私のサービスは何かをしなければなりません。私はThread.sleep()を使用することを考えましたが、電話がonLocationChanged()を呼び出さないようにしますか?または私はポーリングを行うべきですか?while(i < 1000,000){++ i;}?

私はそのようなアイデアのいずれかを使用して、そのような豊富なGPS結果を得ていません。誰かが私にこれを達成するためのヒントを与えることができるかどうか疑問に思う。

+0

コードをアップロードしてください。 – Lucifer

+0

場所の更新を要求した後、場所(特に最初の場所)にしばらく時間がかかります。サービスが何か他のことをしなければならない場合は、それ以外のことを実行してください。 'onLocationChanged'を待っている間、サービスはブロックされません。しかし私は100%ではありません。私はあなたの問題の全体を理解しています。なぜ、あなたは 'Thread.sleep()'を呼び出す必要がありますか、またあなたがそれを呼び出すスレッドを知っていません。 – Jakar

+0

タイムリーなGPS録画が必要です(1日に1回、1泊あたり5分に1回など)。しかし、私は何を選ぶべきか分からない。つまり、onLocation()メソッドをブロックすると思っているThread.sleep(30k)や電池を使い切ることができる忙しい待ち時間。 – Exegesis

答えて

0

私は、WakeLock(バッテリーの無駄遣い)を取り除き、10秒のビジー待機/スレッドスリープ(onLoc()のGPS呼び出しをブロックする場合)と、AlarmManagerを使用してデバイスを復帰させる睡眠とサービスを開始します。

これは、スリープ中にGPSを取得し、バッテリーの電力を節約しません。

1

私はwait()を使用して、LocationListenerインスタンスとブロックを同期させてnotify()を使用できると思います。 wait()、notify()を使用してサンプルを検索します。

1

私は、場所変更された情報を待っている間、サービスを "生きている"ようにしたいと思います。それはシステムによって処理され、コードを追加する必要はありません。場所の変更情報が利用可能になると、サービスのコンテキストでonLocationChanged()が呼び出されます。