1

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

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

android:theme="@android:style/Theme.Translucent.NoTitleBar"

它所做的是检查提供给它的 Intent。如果 Intent 数据为空,它会启动一个新的 Activity,它是应用程序的主要 Activity。

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

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

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

我尝试了各种解决方案均无济于事。我不能在 onPause 或 onStop 的主要活动中使用 finish() ,因为如果用户例如进入设置活动并且这是不想要的行为,它也会退出活动。我还尝试了重新启动启动器活动的变体

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

但这似乎也不起作用。

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

4

1 回答 1

0

在清单中启用android:noHistoryActivity 的属性:

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

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

看:

于 2013-09-14T08:11:39.617 回答