关于 Android 中的启动模式的问题

Posted

技术标签:

【中文标题】关于 Android 中的启动模式的问题【英文标题】:Issue regarding Launch Modes in Android 【发布时间】:2021-01-07 05:28:32 【问题描述】:

我浏览了以下文档链接:

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” 设置为我的 Activity C。

导航是这样的,从 A -> B -> C -> D 和从 D -> C。

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

现在,我想以编程方式理解同样的事情。

因此,为此我从 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 那样工作,它正在打开新的 Activity C...而不是回到 Activity C。

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

【问题讨论】:

singleTasksingleInstance 的特殊启动模式取决于taskAffinity 的使用。这可能非常复杂。如果您没有使用taskAffinity,那么您的特殊启动模式就不会按照您认为的方式工作。 【参考方案1】:

根据文档,

FLAG_ACTIVITY_NEW_TASK 产生与“singleTask”相同的行为 启动模式值。

所以你在开始活动 C 的活动 D 中出错了。你应该这样做,

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

从 C 启动 Activity D 时设置 FLAG_ACTIVITY_NEW_TASK 无关紧要。

【讨论】:

让我试试 试过了。但它仍然从 Activity D 打开新的 Activity C,而不是回到 Activity C。 尝试使用 FLAG_ACTIVITY_CLEAR_TOP。 startActivity(Intent(ActivityD@this,ActivityC::class.java)).setFlags(FLAG_ACTIVITY_CLEAR_TOP)) 我想了解FLAG_ACTIVITY_NEW_TASK的使用

以上是关于关于 Android 中的启动模式的问题的主要内容,如果未能解决你的问题,请参考以下文章

Android:四种启动模式

Android开发学习之路--Activity之四种启动模式

Android开发学习之路--Activity之四种启动模式

Android入门:Activity四种启动模式

学习笔记Android中的Activity启动模式

android Activity 四大启动模式