应用程序中的所有活动都需要用户登录才能查看。用户几乎可以退出任何活动。这是应用程序的一个需求。在任何时候,如果用户注销,我想将用户发送到Login Activity。在这一点上,我希望这个活动是在历史堆栈的底部,以便按下“后退”按钮返回到Android的主屏幕。
我在一些不同的地方看到过这个问题,所有的答案都是相似的(我在这里列出了),但我想在这里提出这个问题来收集反馈。
我已经尝试通过将登录活动的Intent标志设置为FLAG_ACTIVITY_CLEAR_TOP来打开登录活动,这似乎是在文档中列出的,但没有实现我的目标,即将登录活动置于历史堆栈的底部,并阻止用户导航回以前看到的登录活动。我还尝试在清单中使用android:launchMode="singleTop"作为登录活动,但这也没有实现我的目标(而且似乎无论如何都没有效果)。
我相信我需要清除历史堆栈,或完成所有以前打开的活动。
一种选择是让每个活动的onCreate检查登录状态,如果没有登录则检查finish()。我不喜欢这个选项,因为返回按钮仍然可以使用,当活动关闭时返回。
下一个选项是维护所有打开活动的LinkedList引用,这些活动可以从任何地方静态访问(可能使用弱引用)。注销时,我将访问这个列表并遍历之前打开的所有活动,在每个活动上调用finish()。我可能很快就会开始实现这个方法。
然而,我宁愿使用一些Intent标志来实现这一点。我非常高兴地发现,我可以满足我的应用程序的需求,而不必使用我上面概述的两种方法中的任何一种。
是否有一种方法可以通过使用Intent或清单设置来实现这一点,或者是我的第二个选择,维护打开的活动的LinkedList是最好的选择?还是我完全忽略了另一种选择?