清除 Activity Stack 并在 android 中启动新的 Activity

Posted

技术标签:

【中文标题】清除 Activity Stack 并在 android 中启动新的 Activity【英文标题】:Clear Activity Stack and start new activity in android 【发布时间】:2012-09-06 08:52:44 【问题描述】:

我的问题与这类问题略有不同。我需要删除或清除我的活动堆栈,然后开始一个新活动。我认为这不是 clear_top 标志问题。我用一个例子来解释:

我的活动流程:

Login > Home > Screen1 > screen2 ....

我完成登录活动或调用 no_history 标志。所以我的活动是这样的

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack]

我需要处理会话错误。如果在任何时候发生任何会话错误,我需要返回登录活动。但请记住,我在堆栈中没有登录活动。所以 clear_top 不起作用。

如果 Screen2 中发生任何会话错误,那么我需要清除整个堆栈(screen2、screen1、home),然后开始登录活动。这样在登录活动中按下后退按钮后将关闭我的应用程序。

有什么办法可以清除活动栈吗?

提前致谢

【问题讨论】:

现在的问题是,你想返回登录活动吗,即使它不在堆栈中,那么你要完成那个活动。第二个问题是在什么情况下,您想清除堆栈并返回。第一个是您想用 澄清的内容,以便在登录活动中按下后退按钮后将关闭我的应用程序 首先:我有一个保存会话的选项。如果我成功登录,那么它会打开 HOME 活动。根据流程,当我们从 HOME 活动中按下返回按钮时,它应该关闭应用程序。只有退出或会话错误才能显示登录页面。第二:考虑一个网站。当您的会话过期时会发生什么?它将您重定向到登录页面。我想做同样的事情。我必须关闭所有在会话过期时需要登录权限的活动。 android: Clear Activity Stack的可能重复 【参考方案1】:

这是一个有点老的问题,但也许其他人在搜索类似问题的答案时会偶然发现它。

您应该使用标志启动登录活动:Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK - 标志NEW_TASK 的名称可能有点令人困惑,但如果它不存在,它实际上会创建新任务(否则将使用当前任务) - CLEAR_TASK 将从之前的所有活动中清除它。

【讨论】:

【参考方案2】:

试试这个,

完成您当前的活动

     YourCurrentActivity.this.finish();  
     Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class);  
     intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
     startActivity(intent1); 

即使您的活动不在堆栈中,它也可以工作。

希望对你有帮助。

【讨论】:

在此流程中不起作用。 A(完成)-> B -> C(注销)-> A。按回 A 仍将返回到 B。【参考方案3】:

在这种情况下使用 onActivityResult() 来管理活动。

【讨论】:

【参考方案4】:

使用这个

Intent i = new Intent(yourScreen.this,Home.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("EXIT", true);
        startActivity(i);

在 Home 类的 onCreate 中,这样做来检查,

if (getIntent().getBooleanExtra("EXIT", false)) 
    
        Intent i = new Intent(Home.this,Login.class);
        startActivity(i);
        finish();
    

这基本上会做的是,无论您在做什么活动,您都可以使用清除顶部标志调用主屏幕。在主屏幕上,onCreate 方法中有一个检查条件,这将有助于清除堆栈并带您进入登录屏幕。现在在登录屏幕上,如果您按下返回按钮,您将在堆栈被清除时退出应用程序..

如果问题仍然存在,请告诉我...

【讨论】:

很棒的技巧。首先我认为它会产生闪烁。但经过测试,它工作得很好。谢谢 F.T.W.也解决了我的问题 - 谢谢:) 由于 API 11 更简单,而且我认为是正确的,这样做的方法是使用 AntekM 讨论的 Intent.FLAG_ACTIVITY_CLEAR_TASK 标志。

以上是关于清除 Activity Stack 并在 android 中启动新的 Activity的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 Android Stack 的活动?

提交后清除画布[重复]

在调用新活动时从 Back Stack 中删除所有活动 [重复]

Android 返回堆栈管理打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片

activity跳转到新的activity后清除之前的activity

android点击跳转前清除任务栈中的所有activity