android - 杀死后重新打开应用程序,打开上一个 Activity

标签 android android-lifecycle

我的应用历史是正常的;当我启动 Intent 时,我没有使用任何花哨的标志或任何东西。只有顺序的、单任务启动的 Activity 。如果我回到主页,然后使用任务 killer 来终止我的应用程序,那么下次我打开该应用程序时,它会在我在终止之前进行的最后一个 Activity 而不是声明的主要 Activity 中启动。此外,如果我随后点击返回退出应用程序并再次重新打开它,我会得到在我之前打开的 Activity 之前打开的任何 Activity 。

像这样:

A = 主要 Activity ; B = 一些其他 Activity ; C = 一些其他 Activity

  • 打开应用 - A
  • 打开 B - B
  • 打开 C - C
  • 使用任务 killer 杀死应用
  • 打开应用 - C
  • 后退按钮 - 设备主页
  • 打开应用 - B
  • 后退按钮 - 设备主页
  • 打开应用 - A

我希望任务终止后不会记住后台堆栈。我希望该应用程序始终从声明的主要 Activity 开始,除非它已经在后台运行。 (这里不是这种情况,因为正在使用杀戮)然而,这两件事似乎都没有发生,我不知道为什么。

我尝试在 A 的 onCreate 上输入一些代码在我的应用程序类中设置一个“初始化” bool 值,然后在 B 中检查它>C 的 onCreate。这个想法是用 NEW_TASK 和 CLEAR_TOP 标志启动 A 的 Intent ,以尝试检测和纠正这种情况,但它仍然表现出相同的行为,除了它还会将 A 在剩下的任何东西之上。因此,不是将应用程序启动到 B,而是将应用程序启动到 BA

根据我所读到的关于 Activity 生命周期和操作系统终止应用程序的所有内容,这是不可能的,但它肯定会在我的所有测试设备上发生。有没有人知道是什么导致了这种奇怪的行为?

最佳答案

您的应用运行正常。这是默认行为。如果一个应用程序在后台并且另一个应用程序需要资源,Android 将终止该应用程序。当用户返回到原始应用程序时,他会期望返回到它时的状态与他离开时的状态相同,因此 Android 会记住状态并恢复它。这是标准的、默认的、用户预期的行为。

如果你不想要这种行为,你应该添加

android:clearTaskOnLaunch="true"

<activity>为您的根声明 Activity (具有 ACTION=MAIN 和 CATEGORY=LAUNCHER 的那个)在 list 中。当用户从主屏幕返回时,这将导致 Android 从头开始​​启动您的应用。

如果您也不希望用户在从“近期任务”屏幕启动应用时返回到之前的状态,您需要添加

android:excludeFromRecents="true"

<activity>为您的根声明 Activity以及。这将阻止 Android 将您的应用添加到近期任务列表中,因此用户无法从“近期任务”屏幕返回到您的应用。

关于android - 杀死后重新打开应用程序,打开上一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912807/

相关文章:

android - 使用后退按钮离开 Android 应用程序

Android 为 ListVIews 分离空 View

android - RecyclerView 添加了一个 "empty"布局项,当我单击它时,应用程序崩溃了

android - Unity Android-针对x86_64体系结构的Cant Build

android - 将操作栏溢出图标更改为深色版本

java - 是否需要在fragment onActivityCreated 方法中检查父 Activity 是否为空?

java - onDestroy() 之后会发生什么

android - 进程被终止时切勿调用 Create

android - 对 Android 如何处理 Activity 感到困惑

Android Studio 仅构建 1 个模块