アプリケーションのグローバルな onPause() と onResume() のようなものはありますか?
いいえ、申し訳ありません。
私の主なアクティビティは、別の画面/アクティビティに切り替えたときに作業を続けたい GPS 修正をリッスンします。そのため、アクティビティの onPause() で LocationListener を登録解除できません。ただし、ユーザーが現在どの画面/アクティビティにいるかに関係なく、別のアプリケーションに切り替えるときに GPS リスナーの登録を解除し (バッテリーを節約するため)、アプリケーションに戻るときに GPS リスナーを再度オンにしたいと考えています。
考えられるアプローチの 1 つを次に示します。
ステップ #1:LocationListener
ロジックを に移動しService
ます。アクティビティは、ローカル バインディング パターンなどを介して接続します。また、少なくとも 1 つのサービス コールstartService()
があるため、unbindService()
によって が消えることはありませんService
(ローカル バインディング パターンを使用していると仮定します)。
onPause()
ステップ 2:との間に、アクティビティがサービスを呼び出すようにしますonResume()
。
ステップ #3: サービスに、未処理のアクティビティの参照カウントを維持させる。
ステップ #4: 参照カウントが 0 に達したら、タイマーと を介してサービスを起動するように手配しますTimerTask
。TimerTask
また、参照カウントがインクリメントされた場合は、そのような未処理をキャンセルします。
ステップ #5: TimerTask
GPS が実行された場合は、GPS をシャットダウンします。
要するに、GPS を解放するのは、一定量の非アクティブ状態が続いた後であるということです。その非アクティブは何らかの理由である可能性があります。