我从您回复蒂姆的评论中理解了您的问题。所以你想知道
设置启动模式和设置时的行为差异
活动的意图标志
您的这个问题的答案是您在 AndroidManifest.xml 文件中为 Activity 设置了 launchMode,但是特定的启动行为可以通过 Intent 在 runtime 以某些方式进行更改标志FLAG_ACTIVITY_SINGLE_TOP、FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_MULTIPLE_TASK等
现在让我们来谈谈您在主要问题中提到的另外两个问题。
使用 Intent 标志“FLAG_ACTIVITY_NEW_TASK”有什么区别
&“FLAG_ACTIVITY_CLEAR_TOP”和launchMode="singleTask"?
FLAG_ACTIVITY_NEW_TASK
当我们通过意图设置此标志并启动该活动时。在这种情况下,该活动将成为此历史堆栈上新任务的开始。任务(从启动它的活动到下一个任务活动)定义了用户可以移动到的活动的原子组。这意味着它将创建一个单独的历史堆栈。例如,在您的应用程序中,您有一个设置图标,当您单击该图标时,您将转到设置活动,您可以在其中进行更多活动。这里记录的所有动作都将仅从您的设置活动开始。
FLAG_ACTIVITY_CLEAR_TOP
顾名思义,如果您在现有的任务中使用此标志启动一个活动(请理解任务,那么一切都会很容易理解),在这种情况下,所有活动都在此活动上方的堆栈将被关闭,这将成为任务中的最后一个活动或最旧的活动。
单任务
当您启动一个您设置了launchMode = "singleTask" 的活动并且已经有一个以该活动开始的任务正在运行,那么当前任务将被带到最前面,而不是启动一个新实例。
你的第二个问题
将意图标志设置为有什么区别
FLAG_ACTIVITY_SINGLE_TOP 并将launchMode 设置为“singleTop”?
FLAG_ACTIVITY_SINGLE_TOP 和 lanuchMode = "singleTop"
两者具有相同的行为,标志在运行时设置,并且在 AndroidManifest.xml 中的启动模式一开始。行为是,带有 this 的活动将是任务顶部的唯一活动。如果它已经在历史堆栈的顶部运行,则该活动将不会再次启动。
注意:了解该行为的最佳方法是遵循任何教程并进行实际检查。玩弄代码并查看行为。
这里有一些有用的链接:
启动模式:https://developer.android.com/reference/android/R.styleable#AndroidManifestActivity_launchMode
意图标志:https://developer.android.com/reference/android/content/Intent