Intent使用标志"FLAG_ACTIVITY_NEW_TASK"&"FLAG_ACTIVITY_CLEAR_TOP"和有什么区别launchMode="singleTask"?以及将意图标志设置为 FLAG_ACTIVITY_SINGLE_TOP和将launchMode设置为有什么区别"singleTop"。
3 回答
我从你回复蒂姆的评论中理解了你的问题。所以你想知道
设置启动模式和将 Intentflags 设置为活动时的行为差异
对您这个问题的回答是您launchMode为Activity内部 AndroidManifest.xml 文件设置,但特定的启动行为可以在运行时通过Intentflags 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
顾名思义,如果您在现有任务中使用此标志启动一个 Activity (请理解任务,那么一切都会很容易理解),在这种情况下,该 Activity 上方堆栈中的所有 Activity 都将关闭,这将成为任务中的最后一个活动或最旧的活动。
单任务
当您启动您为其设置的活动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
singleTask:- 一个具有 singleTask 启动模式的 Activity 只允许在系统中有一个实例(又名 Singleton)。如果系统中存在Activity实例,则整个Task持有该实例将被移到顶部,而Intent将通过onNewIntent()方法传递。否则,将创建新的活动并将其放置在适当的任务中。您可以使用以下网址获取更多信息:- https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en
flag — FLAG_ACTIVITY_CLEAR_TOP:如果正在启动的 Activity 已经在当前任务中运行,则不会启动该 Activity 的新实例,而是销毁其顶部的所有其他 Activity(调用 onDestroy 方法)并将此意图传递给Activity 的恢复实例(现在在顶部),通过 onNewIntent 方法。注意:对于 FLAG_ACTIVITY_CLEAR_TOP,如果 launchMode 未在 AndroidManifest 中定义或设置为 Activity 的“标准”,则 Activity 及其顶部将被弹出,并且该 Activity 的新实例被放置在顶部。因此,不会调用 onNewIntent 方法。
这是不可取的,大多数时候我们希望重用 Activity 并刷新它的视图状态,比如列表中的数据,当它到达返回堆栈的顶部时,而不是销毁然后重新创建它。
您可以通过以下网址获取更多信息:- https://blog.mindorks.com/android-task-and-back-stack-review-5017f2c18196
我认为 Android 文档https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_CLEAR_TOP很好地解释了这种差异。https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en很好地解释了启动模式。