Activity launchMode、回退栈与 affinity

本文详细介绍了Android中Activity的启动模式(launchMode)、Task和回退栈的概念。通过理解Task的运作机制以及Activity的不同启动模式,可以更好地掌握Android应用的导航行为。重点讨论了alwaysRetainTaskState、clearTaskOnLaunch、finishOnTaskLaunch属性,以及standard、singleTop、singleTask、singleInstance四种launchMode的差异。同时,文章还提到了affinity属性在跨应用任务切换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

最近在看 aosp 源码,Activity 启动流程中涉及到大量 Activity 处理细节,如果不从模型上掌握 Task, affinity 等概念,很容易看迷失在代码里。本文意在从模型上梳理 Activity 启动模式以及对应的设置代表的含意,为继续阅读源码打基础。

Task 与回退栈

一般情况,每个应用包含多个 Activity,这些 Activity 都放到一个栈中。对于一个打开多个 Activity 的应用来说,处于栈顶的 Activity 就是正在显示的页面,点击“返回”按钮时,这个当前栈顶元素被弹出,然后显示新的栈顶 Activity,一直点击“返回”键直接该应用栈中所有元素都被弹出,最后会展示桌面或应用的启动者页面。这个“返回”按钮在英语里叫 Back Button,所以这个栈就叫作 Back-Stack,中文翻译为“回退栈”,回退栈是自然语言中的叫法,在 Android 系统层次称一个回退栈为一个 task。上面说的都是一般情况,可以通过设置 Activity 的启动模式或添加 flags 显示“二般”情况。比如,一个应用可以有多个 Task,一个 Task 中包含多个应用的 Activity 等。下面说说影响 task 的几个属性和几个主要的 flags,看看它们具体直到什么作用。

activity 相关属性

  • alwaysRetainTaskState: 保存整个 task 状态,默认情况下,如果一个 task 长期(比如 30 分钟)处于不可见状态,系统会将这个 task 的非 root 元素全部清空,对应于应用来说就是会只保留“首页”。将此属性置为 true 后,系统就不会清除 task 元素。注意,此属性只对 task 中 root 元素(不一定是 MainActivity)启作用。
  • clearTaskOnLaunch: 与上面 alwaysRetainTaskState 相反,每次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值