问题描述
我已通过以下文档链接:
https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242
在这里,我了解了所有四种启动模式的工作原理:
标准,Singletop,SingleTask,SingleInstance。
还通过在AndroidManifest.xml文件中添加属性'android:launchMode'
清除了实际操作。
现在,从文档中可以得知:
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无关。