我对活动堆栈有一个恼人的问题,我没有找到解决方案。
基本上我有一个充当“启动”活动的活动(我的清单中的主要活动,这是从启动器等开始的)。它是半透明的,使用:
设置机器人:主题= “@机器人:风格/ Theme.Translucent.NoTitleBar”
它做的是检查提供给它的Intent。如果意图数据为空,则会启动一个新活动,这是该应用程序的主要活动。
如果意图数据包含某些命令,则启动器活动应执行某些任务然后退出,甚至不启动主活动。所以这应该在没有任何UI的情况下发生(完成后弹出消息除外)。
我的问题是,如果主活动已经启动,如果用户使用主页按钮离开它,下次使用命令启动启动器活动时,主活动也会短暂显示。
我假设这是因为活动堆栈,因为在这种情况下我没有从启动器活动重新启动主活动。
我尝试了各种解决方案但无济于事。我不能在onPause或onStop的主要活动中使用finish(),因为如果用户输入设置活动并且不是想要的行为,那么它也会退出活动。我还尝试了使用
重新启动启动器活动的各种变体intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
但这似乎也不起作用。
奇怪的是,当发生这种不需要的行为时,onCreate / onResume / onStart在主活动上不被调用。它仍然显示!我猜这是因为它是堆叠的,因为启动活动是半透明的,所以通过它显示主要活动。
答案 0 :(得分:0)
在清单中启用活动的android:noHistory
属性:
<activity
...
android:noHistory="true">
...
</activity>
这将设置在活动堆栈启动下一个活动时从活动堆栈中删除的活动。用户将无法返回具有android:noHistory="true"
的活动。
请参阅: