2012-04-06 121 views
3

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

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

这必须工作在最低的机器人可能,至少2.2

谢谢!

回答

3

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

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

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

此外,如果用户是后呈现在屏幕上登录并按下'后退'按钮,我不希望他们去登录活动。此代码将用户发送到主屏幕正如所预料的:

moveTaskToBack(true); 
+0

我会给它尝试;)只是一个疑问,moveTaskToBack函数必须放在除了为登录一个或登录之一? – 2012-04-06 20:12:05

+0

它的工作原理是,登录后对活动进行了一些细微的更改。我劫持了后退按钮动作以移动任务回退并完成活动。我希望它在每次应用程序恢复时都从登录活动开始 – 2012-04-06 20:34:35

+1

我只在登录后的Activity上的onBackPressed处理程序中使用moveTaskToBack调用,因为我不希望用户再次看到登录屏幕。我只想登录屏幕出现,如果用户注销。 – Andrew 2012-04-06 20:41:00

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

登录活动将不允许掉头回去