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