Activity 的启动模式,kotlin参数默认值

本文详细介绍了Android中Activity的四种启动模式(standard, singleTop, singleTask, singleInstance)及其对任务栈的影响,强调了launchMode与Intent flag在启动模式中的作用。同时提到了如何通过设置taskAffinity属性来分组Activity,并通过示例代码展示了不同启动模式的效果。此外,文章还讨论了Intent flag如FLAG_ACTIVITY_NEW_TASK的重要性和使用场景。" 127710966,5750663,"华为机试:九宫格按键输入的Java, JS, Python实现
摘要由CSDN通过智能技术生成

在默认情况下,同一应用中的所有 Activity 会具有相同的亲和性,所有 Activity 默认会以当前应用的 applicationId 作为自己的 taskAffinity 属性值。我们可以手动为应用内的部分 Activity 指定特定的 taskAffinity,从而将这部分 Activity 进行分组

<activity

android:name=".StandardActivity"

android:launchMode=“standard”

android:taskAffinity=“task.test1” />

<activity

android:name=".SingleTopActivity"

android:launchMode=“singleTop”

android:taskAffinity=“task.test2” />

<activity

android:name=".SingleTaskActivity"

android:launchMode=“singleTask”

android:taskAffinity=“task.test3” />

<activity

android:name=".SingleInstanceActivity"

android:launchMode=“singleInstance”

android:taskAffinity=“task.test4” />

从概念上讲,具有相同 taskAffinity 的 Activity 归属于同一任务栈(实际上并不一定)。从用户的角度来看则是归属于同一“应用”,因为每种 taskAffinity 在最近任务列表中会各自独占一个列表项,看起来就像一个个单独的应用,而实际上这些列表项可能是来自于同个应用

4、启动模式

Activity 的启动模式是一个很复杂的难点,其决定了要启动的 Activity 和任务栈还有返回栈之间的关联关系,直接影响到了用户的直观感受

启动模式就由 launchMode 和 Intent flag 这两者来共同决定,我们可以通过两种方式来进行定义:

  • 在 AndroidManifest 文件中为 Activity 定义 launchMode 属性值,一共包含四种类型的属性值

  • 当通过 startActivity(Intent) 启动 Activity 时,向 Intent 添加或设置 flag 标记位,通过该 flag 来定义启动模式

如果只看四个 launchMode 的话其实并不难理解,可是再考虑多应用交互还有 Intent flag 的话,情况就会变得复杂很多,其复杂性和难点主要就在于:单个任务栈包含的 Activity 可以是来自于不同的应用、单个应用也可以包含多个任务栈、返回栈包含的多个任务栈之间也可以进行顺序切换、甚至任务栈中的 Activity 也可以被迁移到另外一个任务栈、Intent flag 可以多个组合使用

有些启动模式可通过 launchMode 来定义,但不能通过 Intent flag 定义,同样,有些启动模式可通过 Intent flag 定义,却不能在 launchMode 中定义。两者互相补充,但不能完全互相替代,且 Intent flag 的优先级会更高一些

5、launchMode

launchMode 一共包含以下四种属性值:

  • standard。默认模式。系统会在启动该 Activity 的任务栈中创建一个目标 Activity 的新实例,使该目标 Activity 成为任务栈的栈顶。该模式下允许先后启动多个相同的目标 Activity,一个任务栈可以拥有多个目标 Activity 实例,且不同 Activity 实例可以属于不同的任务栈

  • singleTop。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值