2

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

这意味着所有以前没有被称为完成()的活动都保留在内存中(堆栈)

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

4

3 回答 3

7

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

于 2009-12-29T06:28:18.437 回答
1

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

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

于 2009-12-29T10:15:52.960 回答
0

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

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

有关更多详细信息,您可以阅读Android 开发者文档中的 Android基础文档中的组件生命周期。

于 2009-12-29T08:40:14.753 回答