Activity篇之启动模式(LaunchModel)

本文详细介绍了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance。通过实例展示了每种模式的工作原理,以及它们在不同场景下的应用,如通知栏详情页、个人中心修改资料、返回主页和特殊应用启动等。

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

Activity的存储是基于栈存储的,因此在顺序上无法进行自由的切换,但是可以弹出栈或新开栈来实现新队列.

这里我们需要学习Activity的启动模式-LaunchModel:


LaunchModel总共分为4种模式:

standard(标准模式):每次请求都会创建一个新的Activity实例.

singleTop(栈顶复用模式):如果请求的Activity已经在栈顶不存在则创建,如果已经在栈顶存在,会调用其onNewIntent().

应用场景:通知栏的消息点击会产生详情页面,这个详情界面就可以采用singleTop模式,避免多个通知出现多个Activity,用户不断的back.

singleTask(栈内复用模式):如果请求的Activity已经在栈中存在,则让当前Activity移至栈顶同时弹出它之上的所有Activity,并调用其onNewIntent().

应用场景:1.从个人中心修改资料,通常我们会使用statrtActivityForResult到下一个修改界面然后继续到下一个界面,直到到了最后一个界面修改完成后,依次setResult()+finish(),最终完成资料的修改.这里我们可以使用singleTask给个人中心activity,在最后一个修改的Activity完成后,将值传递给个人中心activity   -onNewIntent()接收数据就可以了.

2.返回主页也可以用这个模式实现.

singleInstance(新栈复用模式):和singleTask类似,只不过开启了一个新的Activity栈来存储Activity.

使用场景:1.用户需要注销登陆时2.开启新应用(拍照,图库,浏览器,拨号等)

下面我们先用代码来验证一下:

将Activity4设置为singleTop:


结果Actiivty4的onNewIntent被调用了,并且Activity也没有再次创建:


再来看看当前应用中栈情况(命令:adb shell dumpsys activity):



将Activity2设置为singleTask模式,


我们来看结果:


我们这时查看栈中的情况:



Activity2被复用了,并且弹出之上的栈Activity3,Activity4

最后一种singleInstance,我们将Activity4设置为singleInstance模式,由Activity3来启动Activity4

栈中情况如下:


出现了2个栈(除开桌面),新开了一个栈.如果此时还有Activity4的请求,将会执行它的onNewIntent()。

关于栈的名称设置,在minifest中可以设置:

android:taskAffinity="xx"自行设置.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值