【问题标题】:Android 5 - Activity gets send to background after onFinishAndroid 5 - 活动在 onFinish 后被发送到后台
【发布时间】:2015-09-25 11:32:29
【问题描述】:

我想销毁一个 Activity 并调用 finish() 方法来做到这一点。在低于 Android 5.0.2 的版本中,Activity 实际上会被销毁,但在高于 Android 的版本中,它会徘徊在后台而不是结束。 但是onDestroy() 仍然会被调用。无论操作系统可能想说什么,我是否必须设置一个标志或什么东西才能真正销毁活动?

【问题讨论】:

  • “在上面的 Android 版本中,它徘徊到后台而不是结束”——你的证明是,究竟是什么? “实际被销毁”——您自己承认,活动 正在 被销毁(“但 onDestroy() 仍然被调用”)。请完整而准确地解释您所看到的出乎意料的情况。
  • 我不知道我需要证明。但我最值得注意的观察是,我想要销毁的活动可以在设备上的打开任务列表中选择。这不是我在一个活动上调用完成()后所期望的,因为它不是一个单一的活动应用程序。我不期望这种行为的原因之一是在 Android 5.0.2 以下的设备上,上述行为不适用。
  • 打开任务列表实际上并不是打开任务列表,而是最近任务列表。您对此几乎无能为力。
  • 您说的是最近使用的应用按钮,这些是最近使用的应用,不一定是后台应用。
  • 哦,我不知道,这很令人困惑。这实际上导致了同一应用程序的活动显示在所述列表中的情况。如何确保在任何给定时间仅在此列表中显示一项活动?

标签: android android-activity android-5.0-lollipop activity-finish


【解决方案1】:

但我最值得注意的观察是,我想要销毁的活动可以在设备上的打开任务列表中选择

当然。多年来一直如此。最近的任务列表(现在称为概览屏幕)显示最近使用的任务。这对于高于 5.0.2 的 Android 版本并不新鲜。例如,以下屏幕截图显示了运行 Android 4.1.2 的 Galaxy Nexus 的最近任务列表:

我从冷启动启动了这个设备,从主屏幕启动了联系人(“人物”)应用程序,按下返回退出并销毁该活动,然后调出最近任务列表并截取屏幕截图。

当它不是一个单一的活动应用程序时,这不是我在一个活动上调用 finish() 后所期望的。我不期望这种行为的原因之一是在 Android 5.0.2 以下的设备上,上述行为不适用。

然后,您跌入时空连续体的破裂处,进入了一个平行宇宙,您意想不到的行为是 Android 多年来的工作方式以及大约 10 亿人的习惯。另外,在这个平行宇宙中,我没有头发,这让我很懊恼。

有一些方法可以阻止您的活动显示在最近的任务列表中(例如,android:excludeFromRecents)。但是,这不是典型的行为。

如何确保在任何给定时间此列表中只显示一项活动?

列表是任务,而不是活动。您的活动会在列表中多次出现的唯一原因是您的活动是否在多个任务的 BACK 堆栈中处于最顶层。如果默认设置不适合您,您可以采取措施尝试管理此问题(例如,android:taskAffinity)。

【讨论】:

  • 嗯,我知道当你按下完成时应用程序不会结束,但是在一个有多个活动的应用程序中,完成通常会杀死一个活动,并且在你完成最后一个活动之前没有将它包含在所述列表中。至少这是我用大约十个设备测试的行为。但是您的 android:ExcludeFromRecents 引导我找到了正确的解决方案。我使用了finishAndRemoveTask,这似乎是对棒棒糖的补充
猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
相关资源
最近更新 更多