关于 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。
可能是什么问题?还是我在这里做错了什么?请。指导。谢谢。
【问题讨论】:
singleTask
和singleInstance
的特殊启动模式取决于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开发学习之路--Activity之四种启动模式