intent.setFlags的参数含义及使用方法

首先介绍一下intent.setFlags方法:设置特殊的flags来控制intent的处理事件。就理解成给intent附加一个标志吧。
intent.setFlags有一些重要的参数,这些参数的含义需要弄清楚。在理解这些参数的含义前,必须先了解Activity的生命周期,和多个Activity的栈管理方式。

多个Activity的栈管理方式

多个 Activity 之间采用的是栈道管理方式, 当用户启动新的 Activity 时, 新启动的 Activity 位于栈顶,当用户按后退按钮时, 栈顶的 Activity 被推出栈道并销毁, 如下图所示
这里写图片描述

setFlags的参数含义
  1. FLAG_ACTIVITY_NEW_TASK
    设置此状态,记住以下原则,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样,所以下面的a情况会在同一个栈中),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来存放被启动的activity。

  2. FLAG_ACTIVITY_CLEAR_TOP
    Activity A启动开僻Task堆栈(堆栈状态: A), 在Activity A中启动Activity B(堆栈状态: AB), 在Activity B中启动Activity C(堆栈状态: ABC), 在Activity C中启动Activity D(堆栈状态: ABCD), 在Activity D中启动Activity B, 启动Activity B的Intent的Flag设置为FLAG_ACTIVITY_CLEAR_TOP, (堆栈状态: AB)。

  3. FLAG_ACTIVITY_SINGLE_TOP
    当前Task堆栈中存在ABCD四个Activity, A是栈顶Activity, D为栈底Activity, 存在打开A的Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志, 则会使用栈顶A, 而不会从新New A.
    注意如果在应用外启动应用内的activity,则要设置newtask哦。
launchMode介绍

launchMode的作用与setFlags类似,但是其实在Manifest.xml里面配置的,所以,一旦配置了某launchMode,则这个Activity的所有实例都会有该属性。

  1. standard
    如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,”launchMode”设置为”standard”的 Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求就会实例化一次。
  2. singleTop
    如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,”launchMode”设置为”singleTop”的Activity可以被实例化多次, 可以在Task中的任何位置, 对于一个新的Intent请求如果在Task栈顶, 则会用栈顶的Activity响影Intent请求,而不会重新实例化对象接收请求, 如果没有在栈顶, 则会实例化一个新的对象接收Intent请求。
  3. singleTask
    “launchMode”设置为”singleTask”的Activity总是在栈底, 只能被实例化一次, 它允许其它Activity压入”singleTask”的Activity所在的Task栈,如果有新的Intent请求有此标志的Activity, 则系统会清除有此标志的Task栈中的全部Activity,并把此Activity显示出来。
  4. singleInstance
    launchMode”设置为”singleInstance”的Activity总是在栈底, 只能被实例化一次, 不允许其它的Activity压入”singleInstance”的Activity所在Task栈, 即整个Task栈中只能有这么一个Activity。
`Intent.setFlags()` 方法用于设置 `Intent` 的标志(flags),这些标志可以影响 `Intent` 的行为和启动方式。以下是常见的标志参数及其含义: 1. `Intent.FLAG_ACTIVITY_NEW_TASK`:将目标 `Activity` 启动在一个新的任务中。如果当前没有任务存在,将创建一个新的任务。 2. `Intent.FLAG_ACTIVITY_CLEAR_TASK`:启动一个新的任务,并且清除所有该任务中的现有实例。这个标志通常与 `FLAG_ACTIVITY_NEW_TASK` 一起使用。 3. `Intent.FLAG_ACTIVITY_SINGLE_TOP`:启动模式为 `singleTop`,表示如果目标 `Activity` 已经位于顶,那么不会创建新的实例,而是会调用目标 `Activity` 的 `onNewIntent()` 方法来处理新的 `Intent`。 4. `Intent.FLAG_ACTIVITY_CLEAR_TOP`:如果目标 `Activity` 已经在任务中存在,将会将其之上的所有实例都关闭,使得目标 `Activity` 成为顶。这个标志通常与 `FLAG_ACTIVITY_SINGLE_TOP` 一起使用。 5. `Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS`:启动的 `Activity` 不会出现在最近使用的应用列表(Recent Apps)中。 6. `Intent.FLAG_ACTIVITY_NO_HISTORY`:启动的 `Activity` 不会保留在返回堆中,即按下返回键时不会返回该 `Activity`。 这只是一些常见的标志参数,还有其他更多的参数可以用于特殊的需求。你可以通过使用 `Intent.FLAG_` 前缀来查看可用的标志选项。 注意:标志参数可以通过使用按位或(`|`)运算符进行组合,例如:`intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)`。 请注意,在使用这些标志时要谨慎,确保理解其含义并根据需要正确使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值