15

是否有类似应用程序全局的onPause()东西onResume()

我的主要活动监听 GPS 修复,我想在切换到另一个屏幕/活动时继续工作。因此,我无法LocationListener在活动的onPause(). 但是,我仍然想在切换到另一个应用程序时取消注册我的 GPS 监听器(这样可以节省电池),并在返回我的应用程序时重新打开它,无论用户当前处于什么屏幕/活动中。

有任何想法吗?

4

2 回答 2

13

有没有像应用程序全局 onPause() 和 onResume() 这样的东西?

不,对不起。

我的主要活动监听 GPS 修复,我想在切换到另一个屏幕/活动时继续工作。因此,我无法在活动的 onPause() 中取消注册我的 LocationListener。但是,我仍然想在切换到另一个应用程序时取消注册我的 GPS 监听器(这样可以节省电池),并在返回我的应用程序时重新打开它,无论用户当前处于什么屏幕/活动中。

这是一种可能的方法:

第 1 步:将LocationListener逻辑移动到 aService中,活动通过本地绑定模式或其他方式连接到它。还至少有一个服务调用startService(),所以unbindService()不会导致Service消失(假设您使用的是本地绑定模式)。

第 2 步:在onPause()和期间让活动调用服务onResume()

第 3 步:让服务维护未完成活动的引用计数。

第 4 步:当引用计数达到零时,让服务安排通过 Timer 和TimerTask. TimerTask此外,如果引用计数增加,请取消任何此类未完成的操作。

第 5 步:TimerTask如果 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 回答