0

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

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

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

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

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

在用户能够第二次登录后(假设他恢复了他的凭据),如果 Activity 现在是堆栈中唯一的一个,按下后退按钮会将他带出应用程序,而不是返回到在他的证书被吊销之前他在做什么。最好的方法是什么?

4

2 回答 2

2

我个人的选择是设置你的所有活动(当然除了登录活动)来检查用户的凭据onResume()(我通过继承来做到这一点,我的所有活动都继承自 abstract AuthorizedActivity,但做对你有用的事情) . 如果用户没有凭据(因为他们没有凭据,或者他们已被撤销),那么我startActivityForResult()就是登录活动。如果 LoginActivity 返回有效用户,则一切正常。如果用户是有效但与之前登录的用户不同的用户,我会将他们带到我的根活动中,使用FLAG_ACTIVITY_CLEAR_TOP. 从 loginActivity 中按下后退按钮对它们没有好处,因为应用程序会将它们直接弹回主页。

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

于 2012-04-03T21:54:03.533 回答
0

登录屏幕活动FLAG_ACTIVITY_CLEAR_TOP将起作用,但会删除所有用户的历史记录。您是否关心他们是否更新了他们的凭据然后回击?那应该保留他们的历史吗?

您可以考虑登录活动FLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_NO_HISTORY

如果您希望所有以前的任务都重定向到登录屏幕,您必须确保进行签入,onResume以便在撤销权限后它们无法返回堆栈。

请记住,您还可以在清单<activity>中的元素上设置这些标志。

于 2012-04-03T21:39:56.293 回答