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

时间:2012-09-13 09:34:24

标签: android android-activity

我的问题与这类问题略有不同。我需要删除或清除我的活动堆栈,然后开始一项新活动。我不认为这是一个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),然后开始登录活动。因此,在返回按钮后按下登录活动将关闭我的应用程序。

有没有办法清除活动堆栈?

提前致谢

4 个答案:

答案 0 :(得分:20)

使用此

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();
    }

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

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:2)

试试这个,

完成您当前的活动

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

即使您的活动不在堆栈中也会有效。

希望它有所帮助。

答案 3 :(得分:0)

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