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