【问题标题】:How to prevent stacked activity from showing when app is re-launched?如何防止在重新启动应用程序时显示堆叠的活动?
【发布时间】: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


【解决方案1】:

在清单中的 Activity 上启用 android:noHistory 属性:

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

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

见:

【讨论】:

  • 谢谢,但这会导致与使用 finish() 时相同的问题。主要活动可以产生偏好活动以及另一个活动,并且用户应该能够在离开这些活动时回到主要活动......
  • 我有点不确定您想要的活动流程。是'starter'->'main'->'some_other_one'吗?偶尔'some_other_one'会触发main再次显示?
  • 它是 starter->main->(sometimes)some_other_one,其中 some_other_one 可能是偏好活动。从 some_other_one 应该可以回到 main 。根据意图,它也可以只是“启动器”,那时我也遇到了“主要”问题。现在我已经诉诸于跟踪用户何时离开 main。如果它让它在应用程序中启动另一个活动,我什么也不做。如果由于其他原因(例如家庭新闻)离开它,我会完成活动。
  • 您能否将一些数据传递到意图中,以识别哪些活动触发了主要活动以显示并做出适当反应?您还可以将电源根布局的可见性设置为goneinvisible 以隐藏它。这有点小技巧,但会达到类似的效果。
  • 感谢您的建议,但我无法让它发挥作用。尝试使用 getWindow().getDecorView().getRootView().setVisibility(View.VISIBLE);在主要活动的 onResume 和 getWindow().getDecorView().getRootView().setVisibility(View.GONE);在 onStop 但它仍然会以与上述相同的方式闪烁显示。不知道为什么...
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多