中关村在线

软件

Android Activity四种启动模式解析

在配置Activity时,可通过设置android:launchMode属性来定义其启动模式,控制实例的创建与复用方式。

1、 Android中Activity的生命周期与任务栈管理机制

2、 Android通过任务栈(Task)来管理多个活动界面(Activity)。每当启动一个应用程序时,系统会为其创建一个独立的任务栈,并初始化该应用的主界面。这个主界面通常是清单文件中配置了MAIN和LAUNCHER属性的Activity,作为程序的入口点,最先被加载和显示,后续打开的界面将按顺序压入该任务栈中进行管理。

3、 Android中的Task概念较为抽象,由于系统未提供直接操作Task的API,理解与使用存在一定难度。

4、 开发者无法直接访问任务,只能通过调用Activity的getTaskId()方法获取其所属任务的ID。

5、 可以将Task理解为Activity的栈结构,系统通过栈的方式管理Activity。最先启动的Activity位于栈底,后续启动的Activity依次叠加在栈顶,遵循后进先出的原则,确保界面跳转时的顺序与返回逻辑正确。

6、 四种Activity启动模式详解

7、 标准:采用常规加载方式。

8、 单例顶部模式,仅在任务栈顶创建唯一实例。

9、 singleTask:同一任务中仅允许一个实例存在。

10、 singleInstance:全局唯一实例模式。

11、 示例如下:

12、 每次以该模式启动目标Activity时,系统都会创建一个新的实例,并将其压入当前任务栈的顶部。此过程不会新建任务,而是将新实例添加到原有的任务栈中,保持在同一任务内运行,适用于需要多次创建相同Activity实例的场景。

13、 每次点击按钮时,系统会重新启动StandardTest Activity。由于在配置该Activity时未设置launchMode属性,因此默认使用standard模式加载,即每次启动都会创建新的实例,不会复用已存在的Activity实例,从而导致多次点击会生成多个相同的Activity界面。

14、 多次点击按钮进行测试,不同Activity实例的hashCode各不相同,但其所处的Task ID始终保持一致,说明该启动模式并未创建新的任务栈,而是沿用原有任务。

15、 示例代码

16、 检验代码运行效果

17、 当目标Activity不在任务栈顶部时,系统会新建该Activity的实例,并将其压入任务栈的顶端。

18、 以该方式启动的Activity在同一个任务栈中仅存在一个实例。当使用singleTask模式启动目标Activity时,系统会根据当前任务栈的情况分为三种不同处理情形。

19、 当目标Activity尚未存在时,系统会新建其实例,并将其置于任务栈的顶端。

20、 当待启动的Activity已处于任务栈顶端时,其表现与singleTop模式一致。

21、 当目标Activity已存在于任务栈中但未处于栈顶时,系统会自动将其上方的所有Activity从栈中移除,使该目标Activity被提升至栈顶位置,从而实现快速切换和复用已有实例,避免重复创建相同界面。

22、 配置文件按此设定

23、 在此加载模式中,无论从哪个任务启动目标活动,系统都只会创建该活动的一个实例,并为其分配一个全新的任务栈进行管理,确保其在独立的栈中运行。

24、 当系统以singleInstance模式启动目标Activity时,可划分为以下两种情形:

25、 当目标Activity尚未存在时,系统会先新建一个任务栈,随后创建该Activity的实例,并将其压入新任务栈的顶部。

26、 若目标Activity已存在,无论其所属应用或任务栈位置如何,系统会将该Activity所在的任务栈切换至前台,并直接显示该界面。

27、 测试代码示例

28、 在配置该Activity时,将其exported属性设为true,表示允许其他应用程序启动该组件;同时,在配置中添加了子元素,说明该Activity支持通过隐式Intent进行调用,无需指定具体组件名称,只需匹配相应的动作、类别或数据类型即可触发启动。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具