在开始新的 activity 之前清除 android 堆栈

Clearing android stack before starting a new activity

我有一个包含三个活动的应用程序:登录、注册和主要 activity。

我想在用户登录或注册后启动 Main activity。 但是,当用户按下 'back' 按钮时,他不应该看到他登录的 activity。换句话说,我想在启动 Main activity.

在网上看到了几个解决方法,例如:this, this and this。 他们没有帮助。

这是我用于从登录 activity 启动主要 activity 的代码:

Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getApplicationContext().startActivity(intent);

寄存器activity中的代码非常相似。

我也试过把finish();在我启动 activity 之后,它只关闭了当前的 activity。意思是,如果我从登录 activity 开始,移动到寄存器 activity 并在那里登录(登录 -> 注册 -> Main),当我按下 'back' 按钮时,我会return 登录 activity.

感谢您的帮助! 尤瓦尔.

最简单的方法是在清单中使用 "noHistory" 属性。您可以在清单文件

中为登录名 activity 设置它
<activity
    android:noHistory="true"
/>

你可以这样做:

如果用户转到注册屏幕,则只需完成登录 activity,当他们单击设备上的后退按钮时,您可以调用 onBackPressed () 方法。在那里您可以完成注册屏幕并开始登录 activity。如果用户转到注册屏幕然后注册,您还想完成注册activity并打开主菜单或其他内容。

登录:

点击注册?开始注册activity,完成登录

startActivity (new Intent (Login.this, Register.class));
finish ();

注册:

点击提交?启动 main activity 并完成 register activity

startActivity (new Intent (Register.this, Main.class));
finish ();

点击返回按钮?

@Override
public void onBackPressed (){
startActivity (new Intent (Register.this, Login.class));
finish ();

}

你也可以在androidmanifest中使用:

android:noHistory="true"

在您希望没有历史记录的活动中(如果用户单击后退按钮,则用户无法前往)。 但我更喜欢用代码来做!

希望对您有所帮助!

试试这个:

Intent intent = new Intent(this, SomeOtherClass.class);

// do not keep this intent in history
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

你所做的几乎是正确的,只需对 Intent 做一个小改动。

代替使用,

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    getApplicationContext().startActivity(intent);

使用:

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    getApplicationContext().startActivity(intent);

它将清除顶部,开始一个新任务并清除所有以前的任务。现在,Android 只知道堆栈中存在一个 MainActivity。你可以这样写:

    @Override
    public void onBackPressed() {
         finish();
    }

在 MainActivity 中允许用户退出应用程序而不是返回到 LoginActivity。