Android startactivity和堆栈保留在内存中

时间:2009-12-29 06:15:18

标签: android android-activity

我们开始活动,不要在现有活动上调用finish(),它会将现有活动保留在堆栈中,如果我们按回按钮返回上一个活动,则转移到新活动。

它的意思是所有以前没有被称为finish()的活动都会留在内存中(Stack)

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

听起来你担心内存使用情况,你不应该这样:Android会为你处理这一切。

如果您的某个活动被其他活动覆盖,因此不会让用户长时间看到它已停止。停止的Activity应该仍然保留其所有状态,但在需要内存时可以被系统杀死。这就是您需要实现onStop()onRestart()方法的原因,以便您的Activity可以在被系统自动终止并重新启动后恢复其状态。

有关详细信息,请参阅Android Developer文档中的Component Lifecycles in the Androind Fundamentals document