繁体   English   中英

Android:应用程序全局 onPause() 和 onResume()?

[英]Android: application global onPause() and onResume()?

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

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

有什么想法吗?

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

不,对不起。

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

这是一种可能的方法:

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

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

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

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

第 5 步:让TimerTask在执行时关闭 GPS。

网络是您只会在不活动的情况下释放 GPS。 这种不活动可能是出于任何原因。

使用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
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM