【发布时间】:2013-09-18 22:00:39
【问题描述】:
我的 Activity 堆栈有一个烦人的问题,我还没有找到解决方案。
基本上我有一个作为“启动器”活动的活动(我的清单中的主要活动,这是从启动器等开始的)。它是半透明的,设置使用:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
它所做的是检查提供给它的 Intent。如果 Intent 数据为空,它会启动一个新的 Activity,它是应用的主要 Activity。
如果意图数据包含某些命令,则启动器 Activity 应该执行某些任务然后退出,甚至不启动主 Activity。所以这应该在没有任何 UI 的情况下发生(完成时弹出消息除外)。
我的问题是,如果主activity已经启动,如果用户使用home键离开它,下次用命令启动starteractivity时,主activity也会短暂显示。
我假设这是因为活动堆栈,因为在这种情况下我没有从启动活动重新启动主要活动。
我尝试了各种解决方案均无济于事。我不能在 onPause 或 onStop 的主要活动中使用 finish() ,因为如果用户例如进入设置活动并且这是不想要的行为,它也会退出活动。我还尝试了使用
重新启动启动器活动的变体intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
但这似乎也不起作用。
奇怪的是,当这种不需要的行为发生时,onCreate/onResume/onStart 不会在主 Activity 上调用。仍然显示!我猜这是因为它是堆叠的,并且由于启动活动是半透明的,因此主要活动是通过它显示的。
【问题讨论】:
-
现在我已经诉诸于跟踪用户何时离开 main。如果它让它在应用程序中启动另一个活动,我什么也不做。如果由于其他原因(例如家庭新闻)离开它,我会完成活动。这可行,但如果有人有更好的建议,请告诉我。
标签: android android-intent android-activity