我的问题与这类问题略有不同。我需要删除或清除我的活动堆栈,然后开始一项新活动。我不认为这是一个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),然后开始登录活动。因此,在返回按钮后按下登录活动将关闭我的应用程序。
有没有办法清除活动堆栈?
提前致谢
答案 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()来管理此场景中的活动。