Activity的四种启动模式

本文详细介绍了Android中的任务栈概念及其作用,并通过四种不同启动模式(standard、singleTop、singleTask、singleInstance)的Activity演示了任务栈的具体行为,包括如何通过getTaskId()方法获取任务栈的ID。

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

1)任务栈的概念

问:一个手机里面有多少个任务栈?

答:一般情况下,有多少个应用正在运行,就对应开启多少个任务栈;   

一般情况下,每开启一个应用程序就会创建一个与之对应的任务栈;

二般情况下,如launchMode为 singleInstance,就创建自己单独的任务栈;

2)任务栈的作用:

它是存放Activity的引用的,Activity不同的启动模式,对应不同的任务栈的存放;

可通过getTaskId()来获取任务栈的ID,如果前面的任务栈已经清空,新开的任务栈ID+1,是自动增长的;

3)启动模式:

AndroidManifest.xml中的<activity>标签中可以配置android:launchMode属性,用来控制Actvity的启动模式;

Android系统中我们创建的Acitivity是以的形式呈现的:

①、standard:默认的,每次调用startActivity()启动时都会创建一个新的Activity放在栈顶;

②、singleTop:启动Activity时,指定Activity不在任务栈栈顶就创建,如在栈顶,则不会创建,会调用onNewInstance(),复用已经存在的实例

③、singleTask:在任务栈里面只允许一个实例,如果启动的Activity不存在就创建,如果存在直接跳转到指定的Activity所在位置,

如:栈内有ABCD,D想创建A, 即A上的BCD相应的Activity将移除

④、singleInstance:(单例)开启一个新的任务栈来存放这个Activity的实例在整个手机操作系统里面只有一个该任务栈的实例存在,此模式开启的Activity是运行在自己单独的任务栈中的


启动模式的演示

1、创建两个activity,布局中设置两个按钮,分别开启两个activity

第一、standard启动模式的:开启几个就会在任务栈中存在几个任务

0102都是存在于一个任务栈中的


第二、在清单文件中将02的启动模式改为singletop

此时02处于栈顶,就只会创建一个02的任务,再开启02,也不会创建新的


第三、将02的启动模式改为singletask

如果02上面有其他任务栈,就会将其他的清除掉,利用这个已经创建的02

当开启02的时候,即先将01清除,然后利用下面的02


第四、将02的启动模式改为singleinstance

可以通过打印任务栈的id(调用getTaskId()方法)得知,两个activity不在同一个任务栈中

若先开启三个01,在开启02,任务栈如图:


再开启01,任务栈的示意图如下:


此时按返回键,会先一层一层清空01,最后再清空02

空进程:任务栈清空,意味着程序退出了,但进程留着,这个就是空进程,容易被系统回收;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值