【问题标题】:Android skipping the splash screen when re-opening the app after having pressed back按下后重新打开应用程序时,Android 会跳过启动画面
【发布时间】:2022-09-27 16:53:14
【问题描述】:

所以我的情况就是这样。 假设有一个MainActivity,唯一的工作就是启动它,调用installSplashScreen().setKeepOnScreenCondition { true } 以使用新的向后兼容API 显示启动画面,然后在检查一些状态后它会执行startActivity(SomeActivity); finish()

现在我们在SomeActivity 上,如果我们按下主页按钮,应用程序就会在后台消失。然后如果我们点击启动图标,SomeActivity 会正确启动,而MainActivity\ 的onCreate 永远不会被调用,因此启动屏幕不会再次显示,SomeActivity 会立即显示。

但是,如果我们不按主页按钮,而是按返回按钮,并且应用程序以这种方式在后台运行,那么当我们单击启动器图标时,MainActivity\'s oncreate 再次被调用,并且启动画面图标也会闪烁一小部分,使其看起来很刺耳。

我的问题是,这听起来像是我的一些错误配置,还是只要我不在单一活动架构上,我就会坚持这种行为?

    标签: android android-activity splash-screen android-splashscreen


    【解决方案1】:

    只要我要恢复的活动不是启动器活动,我所面临的问题似乎就没有解决方案。

    来自the docs
    “根启动器活动是使用 ACTION_MAIN 和 CATEGORY_LAUNCHER 声明 Intent 过滤器的活动。这些活动是独一无二的,因为它们充当从应用程序启动器进入您的应用程序的入口点,并用于启动任务。

    Android 12 及更高版本上的系统行为 系统将活动及其任务移至后台,而不是完成活动。当使用 Home 按钮或手势导航出应用程序时,此行为与默认系统行为相匹配。”

    阅读有关 Android 12 及更高版本上的新返回行为的文档告诉我们,当您在堆栈中没有其他内容时按返回将就像您按下主页按钮一样。 这里有一个很大的例外,那就是当您重新打开应用程序时,如果您刚刚弹出的不是启动器活动,那么它仍然需要启动该启动器活动并且无法从您离开的地方恢复处于热状态,这正是我再次看到启动画面的原因。

    所以我认为我最好的选择是暂时忽略这一点,或者将我的应用程序修复为单一活动应用程序,或者至少通过按下返回将启动器应用程序保持为您存在应用程序的顶级应用程序

    举几个例子,如果想体验我的意思,复制步骤是:

    1. 打开应用程序
    2. 按下后退按钮,您将离开应用程序并返回主屏幕
    3. 再次点击应用图标

      截至今天,谷歌照片和谷歌播客等应用程序不再引起轰动。相比之下,谷歌地图、推特、Spotify 等应用程序确实在短时间内再次引起轰动。

    【讨论】:

      【解决方案2】:

      每次您必须清除堆栈时调用启动器活动,这意味着您必须在清单中使用标志来告诉您的应用不要将活动保持在后台尝试 android:launchMode="singleTask" 在清单中的 activity 标记中您的活动每次进入后台时都想被杀死,并且就应该显示多少时间飞溅而言,您可以在计时器完成后使用计时器,然后您的 someActivity 将被调用。

      【讨论】:

      • 不,我认为你误解了我的问题。我不在通过单击返回关闭应用程序后再次打开应用程序时调用启动器活动。相反,我希望它打开我之前所在的活动,就像它在通过单击主页按钮而不是后退按钮退出应用程序时起作用一样。你的答案的第二部分也是如此,我不想人为地让启动画面显示超过它需要的时间,相反,我不希望它在再次打开应用程序时显示,只是比如谷歌的“照片”应用行为。
      猜你喜欢
      • 2021-06-06
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多