【问题标题】:Android: application global onPause() and onResume()?Android:应用程序全局 onPause() 和 onResume()?
【发布时间】:2011-01-05 01:33:36
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: android geolocation gps lifecycle


    【解决方案1】:

    有没有类似应用的东西 全局 onPause() 和 onResume()?

    不,抱歉。

    我的主要活动监听 GPS 修复,我想继续 切换到另一个时工作 屏幕/活动。因此我不能 在 活动的 onPause()。不过我还是 想注销我的 GPS 监听器 切换到另一个应用程序时 (所以节省电池)并把它转回来 在返回我的应用程序时, 不管是什么屏幕/活动 用户当前在。

    这是一种可能的方法:

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

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

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

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

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

    问题是,您只有在某某程度的不活动后才会释放 GPS。这种不活动可能是出于任何原因。

    【讨论】:

    • 非常感谢 Mark 的详细解释。
    • API 14 也是新的,ActivityLifecycleCallbacks。 stackoverflow.com/questions/3667022/…
    • 这个答案在 2016 年是否仍然相同>?全局活动生命周期将非常有用!
    • @androidPlusPlus:你可以使用这个名为Foredroid的库
    【解决方案2】:

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

    【讨论】:

    • 如果我想在整个应用程序中使用它,我必须在每个应用程序中调用它吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2014-03-31
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多