假设有两个活动:
1. 活动A (启动器活动)
2. 活动B
从活动A 启动活动B 时,我完成活动A 。
startActivity(new Intent(A.this, B.class));
finish();
如果从活动B 点击退出按钮,活动B 就会完成。
ExitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
因此,假设活动B 从活动A 启动,我退出活动B (或退出应用程序)。应用程序启动时有2个选项:
1.从启动器图标
2.来自最近的应用程序
现在,如果应用程序从启动器图标启动,则活动A 会启动。但是,如果应用程序是从最近的应用程序启动的,那么活动B 就会启动。
我认为,即使我打电话给完成(),活动B 仍会保持堆叠状态。
我的问题是:当应用程序退出时,如何清除堆栈?在Android 2.3.6版本中测试
答案 0 :(得分:2)
你可以设置android:clearTaskOnLaunch =" true" AndroidManifest.xml文件中的MainActivity属性。我认为这是满足您需求的最便捷方式。
我刚刚测试过,发现这只适用于退出应用并从应用抽屉启动应用时(不要长按HOME并选择应用)。
如果您希望始终将根活动置于最前面,无论您何时重新启动应用程序或从最近的屏幕启动。你可以声明" android:launchMode =" singleTask"对于根活动,这里是MainActivity。
答案 1 :(得分:1)
除了我上面提到的使用片段的解决方案之外,您还可以尝试在AndroidManifest中为您的活动编写android:excludeFromRecents
<强>机器人:excludeFromRecents 强>
是否应排除此活动启动的任务 从最近使用的应用程序列表,概述屏幕。那 是,当此活动是新任务的根活动时,这个 属性确定任务是否不应出现在列表中 最近的应用。如果任务应从列表中排除,则设置为“true”; 如果应该包含它,则设置“false”。默认值为“false”
修改强>
如果您遵循上述规则,可能是您的MainActivity也会从Recent Activity中消失,因为默认情况下,应用程序的所有活动都具有相同的亲和力。要指定其他任务,请使用文档所说的<{1}} < / p>
<强>机器人:taskAffinity 强>
活动具有亲和力的任务。活动与 相同的亲和力在概念上属于同一个任务(相同的 从用户的角度看“应用程序”)。任务的亲和力是 由其根活动的亲和力决定。
亲和力决定了两件事 - 活动的任务 重新定位(参见allowTaskReparenting属性)和任务 它会在活动开始时容纳活动 FLAG_ACTIVITY_NEW_TASK标志。
默认情况下,应用程序中的所有活动都具有相同的关联。 您可以设置此属性以不同方式对它们进行分组,甚至可以放置 在同一任务中的不同应用程序中定义的活动。至 指定活动没有任何任务的亲和力,设置 它是一个空字符串。
如果未设置此属性,则活动将继承关联集 对于应用程序(请参阅元素的taskAffinity 属性)。应用程序的默认关联的名称是 包名由元素设置。