清除 android 活动堆栈开始一个新活动

Posted

技术标签:

【中文标题】清除 android 活动堆栈开始一个新活动【英文标题】:Clear android activity stack starting a new activity 【发布时间】:2012-04-20 07:46:14 【问题描述】:

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

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

这必须在最低的 android 上工作,至少是 2.2

谢谢!

【问题讨论】:

【参考方案1】:

你能做类似这里描述的事情吗:

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

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

【讨论】:

不...我不想重新启动应用程序...我认为这不会是一个很好的用户体验...【参考方案2】:

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

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

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

另外,如果用户在登录后显示的屏幕上并且他们按下“返回”按钮,我不希望他们进入登录活动。此代码将按预期将用户发送到主屏幕:

moveTaskToBack(true);

【讨论】:

我会试一试;) 只是一个疑问,moveTaskToBack 函数必须放在除了登录或登录之外的所有活动上? 它起作用了,但是,登录后对活动进行了轻微的更改。我劫持了后退按钮动作来 moveTaskToBack 并完成活动。我希望它在每次应用程序恢复时从登录活动开始 登录后,我在 Activity 的 onBackPressed 处理程序中只有 moveTaskToBack 调用,因为我不希望用户再次看到登录屏幕。我只希望在用户退出时出现登录屏幕。【参考方案3】:

这就是我一直在做的事情,而且效果很好。 我使用主要活动启动应用程序,检查用户是否已登录,如果他未登录,则像这样启动登录活动

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

它不会让你回去

【讨论】:

以上是关于清除 android 活动堆栈开始一个新活动的主要内容,如果未能解决你的问题,请参考以下文章

Android:从历史堆栈中清除旧的活动实例

清除 Activity Stack 并在 android 中启动新的 Activity

Android:清除活动堆栈

清除活动堆栈

清除旧 SDK(缺少 FLAG_ACTIVITY_CLEAR_TASK)上的完整 Android 活动堆栈

Android:绝对清除活动