清除安卓活动堆栈开始新活动

时间:2012-04-06 18:42:17

标签: android android-activity stack clear

我有一个应用程序,每个新创建的活动都会启动异步任务来验证用户会话。如果会话有效,则应用程序流继续。如果没有,则必须清除整个活动堆栈,并且应该只有登录活动。此活动具有“无历史”标志,因此它永远不会保留在堆栈中。

我一直在尝试这里提供的一些解决方案:Android: Clear Activity Stack但没有成功。

这必须适用于最低的android,至少2.2

谢谢!

3 个答案:

答案 0 :(得分:3)

我将登录活动保留在堆栈上。在登录Activity的onResume()中,我检查用户是否具有登录凭据,如果是,则在登录后显示的下一个屏幕上调用startActivity。在这种情况下,用户看不到登录屏幕。

当用户按下注销按钮时,我清除用户的凭据,然后清除堆栈一直回到登录屏幕:

    Intent intentLaunchLogin = new Intent(this, ActivityLogin.class);
    intentLaunchLogin.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intentLaunchLogin);

此外,如果用户在登录后出现在屏幕上并按下“后退”按钮,我不希望他们转到登录活动。此代码将按预期将用户发送到主屏幕:

moveTaskToBack(true);

答案 1 :(得分:0)

你可以做类似这里描述的事情:

http://blog.janjonas.net/2010-12-20/android-development-restart-application-programmatically

基本上你创建一个警报来启动你的意图,然后你完全关闭你的应用程序。

答案 2 :(得分:0)

这就是我一直以来所做的和完美的工作。 我使用主要活动启动应用程序,检查用户是否已登录,如果他未登录,则启动此类登录活动

void launchLoginActivity(){
 /* Move user to LoginActivity, and remove the backstack */
    Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();
}

它不允许你回去