【问题标题】:detect difference between pausing or leaving an activity vs switching activities?检测暂停或离开活动与切换活动之间的区别?
【发布时间】:2018-02-26 18:44:39
【问题描述】:

我有一个包含多个活动的应用程序,并且在我的 MainActivity 上的 onPause 中有一些我不想在切换到另一个活动时发生的行为。

现在,每当我切换活动时,都会调用 MainActivity onPause() 并且它始终会运行该行为。

【问题讨论】:

  • 它的Activity生命周期,查看这个网址developer.android.com/guide/components/activities/…
  • 我已经看到了,但我不确定它如何回答我的问题。它只是说两个活动的生命周期都将开始......但没有关于如何确定整个应用程序是否已暂停或是否只有一个活动切换到另一个活动
  • 你能解释一下这是什么行为吗?
  • 当主要活动暂停时,它会删除 web 视图中的 cookie....我不希望删除该 cookie,除非整个应用程序暂停或停止,如果用户只是切换活动我希望 cookie 持续存在
  • 我认为你可以使用 CookieSyncManger ,它将有助于在应用程序developer.android.com/reference/android/webkit/… 中管理你的cookie

标签: android android-activity onpause


【解决方案1】:

Activity 生命周期是紧密协调的,因此当从 Activity A 启动一个 Activity B 时,会发生以下生命周期事件:ActivityA.onPause、ActivityB.onCreate、ActivityB.onStart、ActivityB.onResume、ActivityA.onStop。如果您将“行为”转移到生命周期方法 onStop (这是进行大多数关闭/停止工作的更好地方),您绝对可以利用这种生命周期协调来实现您想要的。

创建一个 Lifecycle registrar 对象,当 Lifecycle registrar 对象中没有注册活动时,该对象将执行“行为”。在 onStart() 和 onStop() 回调中注册您的活动。在 Lifecycle 注册对象的 deregister 方法中,检查是否有任何已注册的对象,如果没有,您将执行您的“行为”,无论它可能是什么。您可以扩展此功能以使用服务,只需在服务的 onCreate 和 onDestroy 中分别使用生命周期注册器注册和取消注册服务。

使用 onStop 而不是 onPause 的另一个好处是,当应用程序实际上在后台而不是部分可见时(例如系统显示对话框的情况),您可以避免执行暂停/停止的“行为”。例如,当请求启动蓝牙时,Android OS 会生成一个对话框提示用户,并调用 onPause。这是因为对于某些应用程序,但不是所有应用程序,当您考虑它时,还有各种其他用例会导致应用程序进入 onPause(),这会让您的应用程序执行关闭用户感到恼火进程。

我个人使用这个方案来保持一个打开的连接,当应用程序打开和关闭连接时,应用程序被杀死,或者放在后台。我什至修改了 Lifecycle Registrar 对象以在设备轮换期间保持连接。

【讨论】:

    【解决方案2】:

    这是一个解决方案(有点脏),您可以使用布尔值来知道何时切换活动,在您调用startActivity(intent) 之前将其设置为true,并在@ 中将其设置为false 987654324@.

    P.S,在你的情况下使用onStop()onPause() 更好,我相信你不想在活动部分可见时删除这些cookie

    【讨论】:

    • 这个变量将存储在哪里?此外,此解决方案需要在配置更改期间维护变量。当您有多个 Activity 并向后导航到上一个 Activity 时,此解决方案无法很好地扩展;特别是如果之前的活动被破坏了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多