我的Android应用程序基于四个活动。最后一个活动启动一个Intent服务并将自己设置为后台。
在我将最后一个活动发送到后台之前,我想从Backstack历史中删除所有四个活动
我已经尝试为活动设置no history = true属性。当我使用startActivityForResult时,这会导致错误,所以我需要一个不同的解决方案
答案 0 :(得分:1)
我真的不认为有一种“好”的方法可以做到这一点,我会尝试这样的事情:
首先创建一个SelfClosingActivity
,其唯一的工作是在打开后自行关闭:
public void onCreate(Bundle savedInstanceState()) {
super.onCreate(savedInstanceState);
finish();
}
如果要关闭所有活动(我启动你的IntentService之后),请运行SelfClosingActivity
并添加标志以清除当前堆栈。
Intent intent = new Intent(this, SelfClosingActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这将在打开SelfClosingActivity
之前清除当前堆栈,SelfClosingActivity
将自行关闭,使堆栈完全清空。
答案 1 :(得分:0)
FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK 会做你想做的事。
<强> FLAG_ACTIVITY_CLEAR_TOP 强>
在API级别1中添加了int FLAG_ACTIVITY_CLEAR_TOP如果设置,则为 正在启动的活动已经在当前任务中运行 而不是启动该活动的新实例,所有其他实例 它上面的活动将被关闭,这个意图将是 作为新的意图传递到(现在在顶部)旧活动。
例如,考虑一个由活动组成的任务:A,B,C,D。 如果D调用带有解析为的Intent的startActivity() 活动B的组成部分,然后C和D将完成,B接收 给定的Intent,导致堆栈现在为:A,B。
此启动模式也可用于与之配合使用 FLAG_ACTIVITY_NEW_TASK :如果用于启动任务的根活动, 它会将任何当前正在运行的任务实例带到 前景,然后将其清除到其根状态。这是特别的 例如,从通知启动活动时很有用 管理器。
有关详细信息,请参阅Tasks and Back Stack