有关Android中启动模式的问题

问题描述

我已通过以下文档链接

https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242

在这里,我了解了所有四种启动模式的工作原理:

标准,Singletop,SingleTask,SingleInstance。

还通过在AndroidManifest.xml文件添加属性'android:launchMode'清除了实际操作。

问题在于通过编程在Activity中添加标记

现在,从文档中可以得知:

FLAG_ACTIVITY_NEW_TASK

此标志的工作方式类似于“ launchMode = singleTask”。

现在,要了解其行为,首先,我使用AndroidManifest.xml对其进行了检查。 我在项目中进行了四个活动:A,B,C,D。 将“launchMode = singleTask”设置为我的活动C。

从A-> B-> C-> D和D-> C进行导航。

所以,当我从D转到C时,它不是创建新的Activity C,而是让我进入ActivityC。这很好。明白了。

现在,我想以编程方式理解同一件事。

因此,为此,我从AndroidManifest.xml中删除了静态“launchMode = singleTask”并在Activity C中进行了如下操作:

startActivity(Intent(ActivityC@this,ActivityD::class.java).setFlags(FLAG_ACTIVITY_NEW_TASK))

和在活动D中,我做了如下操作:

startActivity(Intent(ActivityD@this,ActivityC::class.java))

但是,这种编程方式无法像我对AndroidManifest.xml所做的那样工作,它正在打开New Activity C ...,而不是返回到Activity C。

可能是什么问题?还是我在这里做错了什么?请指南。谢谢。

解决方法

根据文档,

FLAG_ACTIVITY_NEW_TASK产生与“ singleTask”相同的行为 launchMode值。

因此,您在开始活动C的活动D中出了错。应该这样做,

startActivity(Intent(ActivityD@this,ActivityC::class.java)).setFlags(FLAG_ACTIVITY_NEW_TASK))

从C启动活动D时设置FLAG_ACTIVITY_NEW_TASK无关。