在Android中清除活动堆栈并启动新活动

14

我的问题与这类问题有所不同。我需要清除或清空我的Activity stack,然后启动一个新的Activity。我认为这不是clear_top标志的问题。我将用一个例子来说明:

我的Activity流程:

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),然后启动登录活动。这样,在登录活动中按下返回按钮后将关闭我的应用程序。

是否有任何方法可以清除活动堆栈?

提前致谢。


现在的问题是,即使它不在堆栈中,你是否想要返回到登录界面,那为什么要结束该活动呢?第二个问题是,在什么情况下,你想要清除堆栈并返回上一个界面。第三个问题是,你想要通过“所以在登录界面按下返回按钮后会关闭我的应用程序”来澄清什么。 - Sahil Mahajan Mj
首先:我有一个保存会话的选项。如果我成功登录,则会打开主页活动。根据流程,当我们从主页活动按下返回按钮时,应该关闭应用程序。只有注销或会话错误才能显示登录页面。其次:想象一个网站。当您的会话过期时会发生什么?它会将您重定向到登录页面。我想要完全相同的效果。在会话过期时,我必须关闭所有需要登录权限的活动。 - shantanu
可能是Android:清除活动堆栈的重复问题。 - Mehdi Dehghani
4个回答

21

使用这个

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方法中有一个检查条件,它将帮助清除堆栈并将您带到登录屏幕。现在在登录屏幕上,如果按下“返回”按钮,则会退出应用程序,因为堆栈已被清除。

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


很棒的技巧。一开始我以为它会产生闪烁,但经过测试后发现它运行得非常好。谢谢。 - shantanu
F.T.W. 也解决了我的问题 - 谢谢 :) - Nic Wise
自从API 11以来,我认为更简单且正确的方法是使用Intent.FLAG_ACTIVITY_CLEAR_TASK标志,正如AntekM所讨论的那样。 - Abid H. Mujtaba

11

这可能是一个有些陈旧的问题,但当其他人在寻找类似问题的答案时,他们可能会偶然发现它。

您应该使用以下标志来启动Login活动: 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。 - topwik

0
使用onActivityResult()来管理此场景中的活动。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接