如何防止在重新启动应用时显示堆叠活动?

时间:2013-09-14 07:33:39

标签: android android-intent android-activity

我对活动堆栈有一个恼人的问题,我没有找到解决方案。

基本上我有一个充当“启动”活动的活动(我的清单中的主要活动,这是从启动器等开始的)。它是半透明的,使用:

设置

机器人:主题= “@机器人:风格/ Theme.Translucent.NoTitleBar”

它做的是检查提供给它的Intent。如果意图数据为空,则会启动一个新活动,这是该应用程序的主要活动。

如果意图数据包含某些命令,则启动器活动应执行某些任务然后退出,甚至不启动主活动。所以这应该在没有任何UI的情况下发生(完成后弹出消息除外)。

我的问题是,如果主活动已经启动,如果用户使用主页按钮离开它,下次使用命令启动启动器活动时,主活动也会短暂显示。

我假设这是因为活动堆栈,因为在这种情况下我没有从启动器活动重新启动主活动。

我尝试了各种解决方案但无济于事。我不能在onPause或onStop的主要活动中使用finish(),因为如果用户输入设置活动并且不是想要的行为,那么它也会退出活动。我还尝试了使用

重新启动启动器活动的各种变体

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

但这似乎也不起作用。

奇怪的是,当发生这种不需要的行为时,onCreate / onResume / onStart在主活动上被调用。它仍然显示!我猜这是因为它是堆叠的,因为启动活动是半透明的,所以通过它显示主要活动。

1 个答案:

答案 0 :(得分:0)

在清单中启用活动的android:noHistory属性:

<activity
    ...
    android:noHistory="true">
    ...
</activity>

这将设置在活动堆栈启动下一个活动时从活动堆栈中删除的活动。用户将无法返回具有android:noHistory="true"的活动。

请参阅: