从当前活动完成堆栈中的所有先前活动?

时间:2010-04-27 14:24:01

标签: android

如何完成应用程序堆栈中的任何先前活动(在任何级别,我的意思不是直接的父级),从当前活动,如某些特定事件,我想要使之前的活动无效?有帮助吗?感谢。

4 个答案:

答案 0 :(得分:28)

我知道这个答案可能会迟到,但我仍会发布,以防有​​人在寻找类似的东西。

我做的是在ACTIVITY_A

中声明了一个静态处理程序
public static Handler h;

onCreate()的{​​{1}}方法中,我有

ACTIVITY_A

现在,从此之后的任何活动,例如h = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { case 0: finish(); break; } } }; ACTIVITY_B,我可以致电

ACTIVITY_C

然后在ACTIVITY_A.h.sendEmptyMessage(0); 和ta-da中调用finish()ACTIVITY_A来自不同的活动。

答案 1 :(得分:3)

您可以使用Intent标志FLAG_ACTIVITY_CLEAR_TOP从堆栈重新启动活动并清除其上方的所有内容。这不是你所要求的,但它可能有所帮助。

为此,请使用:

Intent intent = new Intent(context, classToBeStarted.class);
intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

答案 2 :(得分:3)

所以我厌倦了这一点,但在我做了更深入的测试之后没有工作(我把它放在这里供将来参考):android:clearTaskOnLaunch

  

例如,假设有人从主屏幕启动活动P,然后从那里进入活动Q.用户接下来按Home,然后返回活动P.通常,用户会看到活动Q,因为那样是他们最后在P的任务中做的事情。但是,如果P将此标志设置为“true”,则当用户按下Home并将任务转到后台时,其上的所有活动(在本例中为Q)都将被删除。因此用户在返回任务时只看到P.

https://developer.android.com/guide/topics/manifest/activity-element.html

<强>更新 这确实有效

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

答案 3 :(得分:2)

这可以通过使用静态变量来实现。比如使用布尔变量activity_name_dirty = false; 只要您的特定活动无效的条件发生,请将此标记为真。因此,在调用此活动之后的任何时间都会检查activity_name_dirty的状态。 然后,您可以使用活动标志创建新的即时消息,如Activity Fundamentals

中所述