Android 如何防止在任务顶部启动新活动?

Android 如何防止在任务顶部启动新活动?,android,android-activity,android-task,Android,Android Activity,Android Task,我有一个带有launchMode=singleTop的活动a。活动B采用standart启动模式 第一种情况:我从安装程序或谷歌播放(不是从启动器)启动应用程序,然后 从活动A启动其他活动B(任务堆栈之后将是A->B(堆栈顶部))。如果我最小化应用程序并从启动器打开应用程序,那么活动A开始到应用程序堆栈的顶部(A->B->A) 其他情况(正确的情况):如果我从launcher启动应用程序(不是google play),然后启动活动B,最小化应用程序并从laucner打开应用程序,然后应用程序恢复

我有一个带有
launchMode=singleTop
的活动
a
。活动
B
采用
standart
启动模式

第一种情况:我从
安装程序
谷歌播放
(不是从启动器)启动应用程序,然后 从活动
A
启动其他活动
B
(任务堆栈之后将是
A->B
(堆栈顶部))。如果我最小化应用程序并从启动器打开应用程序,那么活动
A
开始到应用程序堆栈的顶部(
A->B->A

其他情况(正确的情况):如果我从launcher启动应用程序(不是google play),然后启动活动
B
,最小化应用程序并从laucner打开应用程序,然后应用程序恢复以前的状态(堆栈:
A->B


在第一种情况下,它是否能够阻止将活动
A
启动到堆栈顶部?

我在当前项目中遇到了这个问题(大约2/3周前)。这不是堆栈的问题。当应用程序从安装程序/Google Play启动,然后将其最小化时,转到launcher应用程序将把启动活动添加到堆栈顶部。这仅在某些设备中发生。 在你关闭应用程序一次后,它就可以正常工作了

解决方法是在应用程序启动时检查活动是否从启动器启动。我找到了我想到的解决方法:

    if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
    }


>这只发生在我的测试设备上,但在我的个人设备上运行良好@Zohaib你说的测试设备是什么意思?这个问题出现在我的真实设备上。@PavelSantaev似乎我说了一句让人困惑的话,我的意思是,它不是发生在我的个人Redmi设备上,而是发生在我们公司的OnePlus和三星测试设备上。