应用打开时MainActivity跳转到栈顶

Posted

技术标签:

【中文标题】应用打开时MainActivity跳转到栈顶【英文标题】:MainActivity jumps to the top of the stack when app is opened 【发布时间】:2021-03-11 06:43:55 【问题描述】:

我正在尝试开发具有多个活动的应用程序,并且我正在使用singleInstance 启动模式,这样就不会出现同一活动的多个实例。但是,当我按下测试手机上的主页按钮(调用 onStop() 而不是 onDestroy(),然后我再次启动应用程序(通过单击图标)时,它让我回到 MainActivity。进一步调查,我发现活动堆栈(使用adb shell dumpsys activity | grep -i run 命令)不受影响,除了MainActivity,它弹出到堆栈顶部。

我尝试在网上搜索这个问题,但没有看到类似的问题。我可能只是忽略了一些明显的东西,但我不知道。感谢您的帮助!

编辑---

我将举例说明发生的情况和我的预期。我从 MainActivity 启动应用程序,然后使用按钮导航到另一个活动 (AboutUs)。但是,当我按下主页按钮(在手机上)并再次单击应用程序图标时,它没有转到AboutUs,而是转到MainActivityAboutUs 仍在堆栈中,但在 MainActivity 下方。所以,除了MainActivity 上升到顶部之外,堆栈没有受到干扰。

这是来自 android Studio 的 Profiler 的图像。如你所见,我点击了一个按钮转到AboutUs,然后点击了手机上的主页按钮,这产生了一个空白。在我再次点击该应用程序后,它又回到了MainActivityMainActivity 既是单实例又是启动器活动。

【问题讨论】:

在按下 Home 键之前,您的应用中有多少堆栈? 通常是 3-4 次活动。但是,当堆栈中只有 2 个活动时也会发生这种情况。 您能否介绍一下您的案例,包括预期结果和实际结果? MainActivity 是启动器活动吗? MainActivity 是单实例吗?当您按下 Home 按钮时,屏幕上会显示哪些活动?您说当堆栈中有 2 个活动时会发生这种行为,它们是什么? 我添加了一个例子,希望能解决问题 【参考方案1】:

从清单中 MainActivity<activity> 声明中删除特殊启动模式 singleInstance。这种特殊的启动模式是您的问题的原因。您通常应该避免使用特殊的启动模式 singleInstancesingleTask,因为它们导致的问题比解决的问题多。这些仅在非常特定的情况下才需要(例如,如果您想编写自己的主屏幕替换)。

【讨论】:

谢谢!这行得通 :) 只是作为一个问题,我觉得在同一个活动的堆栈中有多个记忆很奇怪,人们通常只是在onStop()onPause() 中做某事以确保不会发生冲突的事情吗?跨度> 不,在某些情况下您想使用相同的Activity,但在您的堆栈中有多个实例。它确实会导致一些导航问题,但在某些情况下它是有意义的。不过,大多数情况下,这不是必需的或不需要的,但幸运的是,如果您正确地对应用程序进行编程,则无需执行任何特殊操作来防止它发生。

以上是关于应用打开时MainActivity跳转到栈顶的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置Word下次打开时跳转到上次阅读的位置

怎样设置Word下次打开时跳转到上次阅读的位置

在html里打开一个pdf文件,如何通过Javascript获取这个PDF的书签,让PDF打开时直接跳转到指定书签位置

活动的四种启动模式

ms access 2003 - 表单上的文本框:不跳转到任何文本框

保存书籍的最后一页并在书籍打开时加载?