[英]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.