清除 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的主要内容,如果未能解决你的问题,请参考以下文章
在调用新活动时从 Back Stack 中删除所有活动 [重复]
Android 返回堆栈管理打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片