Android:清除活动堆栈

Jay*_*ayu 122 stack android android-activity

我在我的应用程序中有几个活动.并且流程非常复杂.当我单击Logout应用程序naviagates登录屏幕时,用户可以通过取消按钮退出(调用system.exit(0))

当我退出或退回按钮时,系统从堆栈调用一个活动:(当我到达登录界面时,如何清除堆栈中的所有活动?调用finish()是不切实际的,因为有很多活动,一些活动不应该关闭是活动的,如本机相机调用活动.

validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
Run Code Online (Sandbox Code Playgroud)

Cyn*_*era 318

大多数人都错了.如果要关闭现有的活动堆栈而不管其中的内容是什么并创建新的root,则正​​确的标志集如下:

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

来自doc:

public static final int FLAG_ACTIVITY_CLEAR_TASK
在API级别11中添加

如果在传递给的Intent中设置 Context.startActivity(),则此标志将导致在活动开始之前清除与活动关联的任何现有任务.也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成.这只能与FLAG_ACTIVITY_NEW_TASK.一起使用.

  • 工作完美.任何方式将其转换为API级别10? (3认同)

Dav*_*son 29

当您呼叫startActivity最后一个活动时,您可以随时使用

Intent.FLAG_ACTIVITY_CLEAR_TOP

作为该意图的旗帜.

阅读更多关于国旗的信息.

  • 从文档中,FLAG_ACTIVITY_CLEAR_TOP仅在**特定活动"已在当前任务中运行"时清除堆栈** (13认同)
  • 感谢您显示正确的资源.我做的错误是关闭登录活动.我不应该关闭它.当活动首先加载时.所以当我使用Clear_top标志回调它时,登录活动会清除顶部的所有活动.由于login是第一个entrace活动,它会清除之后开始的所有活动.所以bingo它工作:) (7认同)

whl*_*hlk 16

这是一个简单的辅助方法,用于启动新活动,作为从API级别4到当前版本17的新顶级活动:

static void startNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) {
    Intent intent = new Intent(currentActivity, newTopActivityClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11
    currentActivity.startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

从你当前的活动中这样称呼它:

startNewMainActivity(this, MainActivity.class);
Run Code Online (Sandbox Code Playgroud)


Hir*_*tel 9

清除以下代码后面活动:

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

完成