应用打开时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
,而是转到MainActivity
。 AboutUs
仍在堆栈中,但在 MainActivity
下方。所以,除了MainActivity
上升到顶部之外,堆栈没有受到干扰。
这是来自 android Studio 的 Profiler
的图像。如你所见,我点击了一个按钮转到AboutUs
,然后点击了手机上的主页按钮,这产生了一个空白。在我再次点击该应用程序后,它又回到了MainActivity
。 MainActivity
既是单实例又是启动器活动。
【问题讨论】:
在按下 Home 键之前,您的应用中有多少堆栈? 通常是 3-4 次活动。但是,当堆栈中只有 2 个活动时也会发生这种情况。 您能否介绍一下您的案例,包括预期结果和实际结果? MainActivity 是启动器活动吗? MainActivity 是单实例吗?当您按下 Home 按钮时,屏幕上会显示哪些活动?您说当堆栈中有 2 个活动时会发生这种行为,它们是什么? 我添加了一个例子,希望能解决问题 【参考方案1】:从清单中 MainActivity
的 <activity>
声明中删除特殊启动模式 singleInstance
。这种特殊的启动模式是您的问题的原因。您通常应该避免使用特殊的启动模式 singleInstance
和 singleTask
,因为它们导致的问题比解决的问题多。这些仅在非常特定的情况下才需要(例如,如果您想编写自己的主屏幕替换)。
【讨论】:
谢谢!这行得通 :) 只是作为一个问题,我觉得在同一个活动的堆栈中有多个记忆很奇怪,人们通常只是在onStop()
或onPause()
中做某事以确保不会发生冲突的事情吗?跨度>
不,在某些情况下您想使用相同的Activity
,但在您的堆栈中有多个实例。它确实会导致一些导航问题,但在某些情况下它是有意义的。不过,大多数情况下,这不是必需的或不需要的,但幸运的是,如果您正确地对应用程序进行编程,则无需执行任何特殊操作来防止它发生。以上是关于应用打开时MainActivity跳转到栈顶的主要内容,如果未能解决你的问题,请参考以下文章
在html里打开一个pdf文件,如何通过Javascript获取这个PDF的书签,让PDF打开时直接跳转到指定书签位置