我已经在几个不同的地方看到了这个问题,都有类似的答案(我在这里概述),但我想在这里提出这个问题以收集反馈。
我尝试通过将“登录 Activity”的 Intent 标志设置为 FLAG_ACTIVITY_CLEAR_TOP 打开它,这似乎按照文档所述进行操作,但不能实现我的目标,即将“登录 Activity”放置在历史堆栈的底部,并防止用户导航回先前浏览过的已登录活动。我还尝试在清单中为“登录 Activity”使用 android:launchMode="singleTop",但这也无法实现我的目标(而且似乎没有任何效果)。
我认为我需要清除历史堆栈或完成所有先前打开的活动。
一种选择是让每个活动的 onCreate 检查登录状态,并在未登录时 finish()。我不喜欢这个选项,因为返回按钮仍然可用,当活动关闭时会导航回去。
下一个选项是维护对所有打开的活动的引用的 LinkedList,该 LinkedList 是从任何地方静态访问的(可能使用弱引用)。在注销时,我将访问此列表并迭代所有先前打开的活动,在每个活动上调用 finish()。我可能很快开始实施这种方法。
然而,我宁愿使用一些 Intent 标志技巧来完成这个目标。如果能够不使用我上面概述的两种方法之一就能满足应用程序的要求,那么我将非常高兴。有没有一种通过使用
Intent
或清单设置来实现这一点的方法,还是我的第二个选项,维护一个打开活动的LinkedList
,是最好的选择?或者还有其他我完全忽略的选项吗?