如何同时“破坏”多个Android活动

时间:2012-09-24 14:03:02

标签: android android-activity android-lifecycle

我在app中有一些向导经历了6个活动。

所以我打电话给:

主要活动   - 致电选项1     - 拨打选项2       - 拨打选项3        - 拨打选项4         - 拨打选项5

现在,在选项5上,我将整个操作保存到数据库,此时我需要返回主要活动并销毁Option1,2,3,4和5.

在选项5保存到数据库之前,我需要能够返回,进行更改,转到选项5并保存。

正确的做法是以某种方式创建具有以下方法的方法:

private void cleanStack(){
   Option1.finish();
   Option2.finish();
   Option3.finish();
   Option4.finish();
   Option5.finish();
}

然后开始(或恢复)主要活动?

TNX

2 个答案:

答案 0 :(得分:7)

使用以下内容清除堆栈:

Intent intent = new Intent ( this , MainActivity.class );
intent.addFlags ( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity ( intent );

以这种方式,因为在堆栈中你有: 主要活动 - >呼叫选项1 - >呼叫选项2 - >呼叫选项3 - >呼叫选项4 - >拨打选项5

如果您使用清除顶部标志启动 MainActivity ,则 MainActivity 顶部的堆栈中的所有活动都将完成。< / p>

答案 1 :(得分:3)

我要做的是,而不是完成所有活动,创建一个Intent来回调你的MainActivity。

使用setFlags方法将此Intent设为FLAG_ACTIVITY_CLEAR_TOP

这将检查您的堆栈以查看MainActivity的实例是否已经存在,如果它确实存在,它会将该Activity带到前面并清除其上方的所有活动,而不是重新启动MainActivity并将其置于堆栈顶部。

如果MainActivity需要选项1-5中的信息,您可能需要刷新数据,因为在大多数情况下,CLEAR_TOP会将MainActivity的旧实例置于焦点而不是完全重新创建它(onCreate不会被叫,但是onStartonResume会。)

这是Intent类的documentation。如果您遇到困难,还有其他标志可以帮助您进行导航。祝你好运!