清除所有活动

3
我有4个活动:A、B、C和D,还有一个:E。
在A、B、C和D之间启动新活动时没有问题,但是在某些情况下(例如登录成功时),我们希望启动活动E,但清除所有A、B、C和D活动(即清除后台堆栈)。
所以,当你到达活动E并按返回按钮时,你将离开应用程序。
我尝试在startActivity中添加标志:Intent.FLAG_ACTIVITY_CLEAR_TASK、Intent.FLAG_ACTIVITY_CLEAR_TOP等等,但是我无法实现这种行为。
任何想法吗?
谢谢!
3个回答

1
Intent intent = new Intent(this, EActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                this.startActivity(intent);
                this.finish();

那对我没用。最终的解决方案是通过 BroadcastReeiver 实现我想要的登录/注销结构。 - LopezAgrela
使用 setFlag() 替代 addFlag(),像这样 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); - Amol Wadekar

0

在活动E中重写onBackPressed方法:

    @Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }

0

尝试使用startActivity启动活动A、B、C和E

Intent intent = new Intent(A.this,B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
A.this.finish();

并在androidmanifest.xml中声明您的A、B和C活动:

<Activity android:name=".A" 
    android:launchMode="singleInstance" />
 //..do B,C activities same

在 Activity E 中重写 onKeyDown 方法

@verride
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        Activity_E.this.finish();
    }
    return super.onKeyDown(keyCode, event);
}

好的。好主意!但问题是我想要特定的行为,如下所示:如果我还没有到达活动E,我希望用户可以返回到另一个活动,因此我不能完成它们,直到我停留在活动E。我不知道你是否明白我的意思。谢谢回答! - LopezAgrela
@alberking:我理解你的意思。只需使用一个字符串标志,您可以在其中存储当前活动名称,并在启动新活动时将其与意图一起发送。在新活动中,在调用Activity.this.finish()或onBackPressed之前检查用户来自哪个活动。如果用户在E Activity内,则在返回时完成E Activity;如果用户在D Activity内,则在返回时启动C Activity... - ρяσѕρєя K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接