いいえ、違います。可能な解決策/ハックを含む、詳細な(非常に良い)情報はこちら。
1に関しては、知識に基づいた推測をして、違いはないと言わなければなりません
私が収集できることから、更新に使用しているプロバイダーに違いはありませLocationManager.NETWORK_PROVIDER
んLocationManager.GPS_PROVIDER
。
少しOQになる危険があるので、サービスをまったく実行し続けるために、どの種類のアプリケーションがウェイクロックを取得する必要があるのか 少し興味があります。私の知る限り、wake lock を使用しても、Service
実行を継続できるわけではありません。Service
が実行され続けることを保証する唯一のことは、それをフォアグラウンド ( Service.startForeground()
) に置くことです。そうしないと、wake lock を取得したかどうかに関係なく、システムがサービスを強制終了する可能性があります。そうは言っても、それが実行されている場合、それはHandler
何かで動作することができます。
このアプローチを使用していて、シナリオに基づいていると思われる場合は、使用しないことをお勧めします。基本的に、サービスを作成し、フォアグラウンドで実行し (推測)、画面がオフのときに位置情報の更新を要求するためだけにウェイクロックを取得しています。これは少しやり過ぎのようです。
Handler.postAtTime
orの恐ろしいタイミングよりもはるかに正確なタイミングによる利点がある、より効率的な方法がありHandler.postDelayed
ますAlarmManager.setRepeating()
。type を ELAPSED_REALTIME_WAKEUP または RTC_WAKEUP に設定して、デバイスがスリープ状態になったときに実行されるようにします。次に、アラーム イベントが発生し、BroadcastReceiver
作成する必要がある によって受信されたときに、更新を要求して他のイベントを処理できます。
を使用しておらず、Handler
単に位置情報の更新を要求している場合でも、このアプローチの方がおそらく優れているでしょうService
。
そして、LocationManager.addProximityAlert()
ここに行く方法のようです。これにも欠陥があります(1を参照)
ところで、同様の質問: Android: 携帯電話がスリープ状態のときに GPS 位置情報が更新されますか?