15

グローバルなアプリケーションのようなものはありますonPause()onResume()?

私の主なアクティビティは、別の画面/アクティビティに切り替えたときに作業を続けたい GPS 修正をリッスンします。LocationListenerそのため、アクティビティの で自分の登録を解除できませんonPause()。ただし、ユーザーが現在どの画面/アクティビティにいるかに関係なく、別のアプリケーションに切り替えるときに GPS リスナーの登録を解除し (バッテリーを節約するため)、アプリケーションに戻るときに GPS リスナーを再びオンにしたいと考えています。

何か案は?

4

2 に答える 2

13

アプリケーションのグローバルな onPause() と onResume() のようなものはありますか?

いいえ、申し訳ありません。

私の主なアクティビティは、別の画面/アクティビティに切り替えたときに作業を続けたい GPS 修正をリッスンします。そのため、アクティビティの onPause() で LocationListener を登録解除できません。ただし、ユーザーが現在どの画面/アクティビティにいるかに関係なく、別のアプリケーションに切り替えるときに GPS リスナーの登録を解除し (バッテリーを節約するため)、アプリケーションに戻るときに GPS リスナーを再度オンにしたいと考えています。

考えられるアプローチの 1 つを次に示します。

ステップ #1:LocationListenerロジックを に移動しServiceます。アクティビティは、ローカル バインディング パターンなどを介して接続します。また、少なくとも 1 つのサービス コールstartService()があるため、unbindService()によって が消えることはありませんService(ローカル バインディング パターンを使用していると仮定します)。

onPause()ステップ 2:との間に、アクティビティがサービスを呼び出すようにしますonResume()

ステップ #3: サービスに、未処理のアクティビティの参照カウントを維持させる。

ステップ #4: 参照カウントが 0 に達したら、タイマーと を介してサービスを起動するように手配しますTimerTaskTimerTaskまた、参照カウントがインクリメントされた場合は、そのような未処理をキャンセルします。

ステップ #5: TimerTaskGPS が実行された場合は、GPS をシャットダウンします。

要するに、GPS を解放するのは、一定量の非アクティブ状態が続いた後であるということです。その非アクティブは何らかの理由である可能性があります。

于 2010-01-14T13:34:13.123 に答える
7

ActivityLifecycleCallbacksを使用します。アプリケーションに登録します。

registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = Unit
    override fun onActivityStarted(activity: Activity) = Unit
    override fun onActivityResumed(activity: Activity) {
        Log.d(TAG, "Activity resumed: $activity")
    }
    override fun onActivityPaused(activity: Activity) {
        Log.d(TAG, "Activity paused: $activity")
    }
    override fun onActivityStopped(activity: Activity) = Unit
    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit
    override fun onActivityDestroyed(activity: Activity) = Unit
})
于 2015-06-25T12:01:49.793 に答える