【问题标题】:Android startactivity and stacks keep in memoryAndroid startactivity 和堆栈保存在内存中
【发布时间】:2009-12-29 06:15:18
【问题描述】:

我们开始活动并且不对现有活动调用finish(),它将现有活动保留在堆栈中,如果我们按下后退按钮,我们将返回到前一个活动,然后移动到新活动。

这意味着之前所有未调用完成()的活动都保留在内存中(堆栈)

现在的问题是我不想为每个活动调用完成是否有任何集中的地方我可以定义只保留堆栈中的最后 3 个活动并删除其余活动?

【问题讨论】:

  • 你的问题解决了吗?你能在内存不足的情况下保持你的活动吗?

标签: android android-activity


【解决方案1】:

在 Android Manifest 中的 [activity] 标签中,您可以指定 android:noHistory - 当用户离开时,是否应该从 Activity 堆栈中删除该 Activity 并完成(调用它的 finish() 方法)并且它在屏幕上不再可见——如果应该完成则为“true”,否则为“false”。默认值为“假”。 “真”值意味着活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户将无法返回它。此属性是在 API 级别 3 中引入的。

【讨论】:

  • +1 这可以被认为等同于在您的活动的 onStop() 中调用 finish()。您还可以使用 Intent Flags 来控制堆栈上的活动。
  • 即使设备在内存不足的情况下运行,它是否会保持您的活动?
【解决方案2】:

在启动解析为活动的新 Intent 时,请考虑设置适当的 Intent 标志,可以在 here 找到此类标志的列表。使用这些标志,您可以重新排序历史堆栈上的活动并将其清除。在活动和任务指南文档see here 中有一个很好的描述。

或者,在您的部署描述符(也称为 Android 清单)中,为您的活动设置适当的属性(noHistory 将适合您的问题)。 详情请参考this

【讨论】:

    【解决方案3】:

    听起来您担心内存使用,但您不应该担心:Android 会为您处理所有这些。

    当您的一项活动被您的另一项活动所覆盖时,它不再对用户可见,它被停止。已停止的 Activity 仍应保留其所有状态,但可以在需要内存时被系统终止。这就是为什么您需要实现onStop()onRestart() 方法,以便您的Activity 在被系统自动杀死并重新启动后可以恢复其状态。

    有关更多详细信息,您可以在 Android 开发者文档中阅读有关 Component Lifecycles in the Androind Fundamentals document 的信息。

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2012-11-28
      • 2018-09-27
      • 2011-10-21
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多