我有一个应用程序,每个新创建的活动都会启动一个异步任务来验证用户会话。如果会话有效,则应用程序流继续。如果没有,则必须清除整个活动堆栈,并且应该只有登录活动。此活动有一个“无历史记录”标志,因此它永远不会保存在堆栈中。
我一直在尝试这里提供的一些解决方案:Android: Clear Activity Stack但没有成功。
这必须在最低的 android 上工作,至少是 2.2
谢谢!
我有一个应用程序,每个新创建的活动都会启动一个异步任务来验证用户会话。如果会话有效,则应用程序流继续。如果没有,则必须清除整个活动堆栈,并且应该只有登录活动。此活动有一个“无历史记录”标志,因此它永远不会保存在堆栈中。
我一直在尝试这里提供的一些解决方案:Android: Clear Activity Stack但没有成功。
这必须在最低的 android 上工作,至少是 2.2
谢谢!
我将登录活动保留在堆栈上。在登录活动的 onResume() 中,我检查用户是否具有登录凭据,如果是,则为登录后显示的下一个屏幕调用 startActivity。在这种情况下,用户看不到登录屏幕。
当用户按下注销按钮时,我会清除用户的凭据,然后将堆栈一直清除到登录屏幕:
Intent intentLaunchLogin = new Intent(this, ActivityLogin.class);
intentLaunchLogin.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentLaunchLogin);
此外,如果用户在登录后显示的屏幕上并且他们按下“返回”按钮,我不希望他们进入登录活动。此代码将按预期将用户发送到主屏幕:
moveTaskToBack(true);
你能做类似这里描述的事情吗:
http://blog.janjonas.net/2010-12-20/android-development-restart-application-programmatically
基本上你创建一个警报来启动你的意图,然后你完全关闭你的应用程序。
这就是我一直在做的事情,而且效果很好。我使用主要活动启动应用程序,检查用户是否已登录,如果他未登录,则像这样启动登录活动
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();
}
它不会让你回去