如何将用户踢到登录屏幕活动传递堆栈中的所有其他应用程序活动?

时间:2012-04-03 21:34:30

标签: java android

假设您有一个与网络应用相关的Android应用,需要用户登录才能使用它。用户在登录屏幕活动中登录,然后进入其他活动。每次用户启动活动时,应用程序都会再次检查其登录凭据(凭据存储在某个中央数据库中)。

当用户从一个活动跳转到另一个活动时,让我们假装从服务中撤消用户的登录凭据。用户下次访问活动时,应用会看到他不再拥有访问权限。该应用程序现在应该将用户踢回登录屏幕Activity。

但是,由于应用程序在用户使用应用程序时已创建了一堆活动,因此如何获取登录屏幕。在您到达登录屏幕活动(应该是应用程序堆栈底部的活动)之前,您是否杀死/销毁所有活动?

或者您是否开始新的登录屏幕活动并直接进入?

或者我应该通过FLAG_ACTIVITY_CLEAR_TOP通过意图调用登录屏幕活动吗?

用户能够第二次登录后(假设他恢复了他的凭据),如果活动现在是堆栈中的唯一一个,按下后退按钮会将他带出App,而不是在取消他的证书之前回到他正在做的事情。最好的办法是什么?

2 个答案:

答案 0 :(得分:2)

我个人的选择是设置你的所有活动(当然除了登录活动)以检查用户在onResume()中的凭据(我通过继承来做,我的所有活动都从一个摘要继承) AuthorizedActivity,但做适合你的事情)。如果用户没有凭据(因为他们没有凭据或者他们已被撤销),那么我startActivityForResult()登录活动。如果LoginActivity返回一个有效的用户,一切都很好。如果用户是有效但与以前登录的用户不同的用户,我会将其带到FLAG_ACTIVITY_CLEAR_TOP的root活动中。从loginActivity按下后退按钮对他们没有好处,因为应用程序会将它们直接弹回家。

我发现这种方法可让我灵活地决定何时以及如何检查/撤销凭据,即使他们(简要地)离开应用程序。

答案 1 :(得分:0)

使用FLAG_ACTIVITY_CLEAR_TOP的登录屏幕活动可以使用,但会删除所有用户的历史记录。你是否关心他们是否更新了他们的凭据,然后再按回去?这应该保留他们的历史吗?

您可以考虑FLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_NO_HISTORY作为登录活动。

如果您希望以前的所有任务都重定向到登录屏幕,那么您必须确保在onResume中进行检查,以便在撤销权限后无法通过堆栈返回。

请注意,您还可以在manifest<activity>元素上设置这些标记。

相关问题