如何为所有活动设置无历史记录

时间:2016-11-14 18:22:01

标签: android android-activity

我的Android应用程序基于四个活动。最后一个活动启动一个Intent服务并将自己设置为后台。

在我将最后一个活动发送到后台之前,我想从Backstack历史中删除所有四个活动

我已经尝试为活动设置no history = true属性。当我使用startActivityForResult时,这会导致错误,所以我需要一个不同的解决方案

2 个答案:

答案 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