【问题标题】:Issue regarding Launch Modes in Android关于 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,那么您的特殊启动模式就不会按照您认为的方式工作。

标签: android kotlin android-intent android-activity launchmode


【解决方案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的使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2011-08-10
相关资源
最近更新 更多