如何清除Android Stack的活动?

Tot*_*tic 53 stack android android-activity back-stack

我在Android中有一个包含多个活动的应用程序,我希望用户能够通过按菜单按钮注销.我遇到的问题是

A)的Android不会让你终止应用程序和
B),即使我的用户发送给LoginActivity他们又可以随时按下背部和马上回以前的活动,他们是in.

我已经尝试使用以下两个标志启动Activity:

Intent intent  = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我也亲自尝试过每一个.

我也打过电话finish()startActivity(intent),我在另一个StackOverflow的问题读取.

小智 42

这应该是按位OR,否则你最终会覆盖早期的标志.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)

像这样:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的唯一方法是,您尝试启动的活动已经在活动堆栈中.Android YU SO WEIRD? (30认同)

Ten*_*r04 35

在您的登录活动中,覆盖后退按钮,以便隐藏您的应用而不是完成活动:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

另外一定要在root活动上设置android:alwaysRetainTaskState ="true",这样Android在用户不活动30分钟后就不会清除你的堆栈(包括登录活动).

然后在成功登录时调用finish().

  • 谢谢,你的代码让我走上了正确的道路,但这也会做同样的事情:@Override public void onBackPressed(){moveTaskToBack(true); } (8认同)

Ric*_*ier 31

根据Wakka 从历史堆栈删除活动 ...


添加android:noHistory="true"属性到你<activity>AndroidManifest.xml这样的:

<activity android:name=".MyActivity"
    android:noHistory="true">
</activity>
Run Code Online (Sandbox Code Playgroud)

  • 完善!这很简单 (2认同)

mat*_*ngs 6

如果您使用Android API 11或以上,可以使用以下代码清除堆栈.

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
Run Code Online (Sandbox Code Playgroud)


ama*_*Bit 5

这不会清除你的活动堆栈.

即使在完成上述所有答案之后,当我按下后退按钮时,它会在关闭应用程序之前显示最后一次活动.

这就是我做的:

@Override
public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
}
Run Code Online (Sandbox Code Playgroud)

现在我的应用程序退出按下:)没有任何麻烦.