Activity的启动模式及应用场景

Activity的启动模式一共有四种,分别为 standard,singleTop,singleTask,singleInstance

可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题。

设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置Android:launchMode属性。

下面详细介绍四种模式:

1.standard

standard模式是默认的启动模式,每次startActivity都是创建一个新的activity的实例, 适用于绝大大数情况。

不用为<activity>配置android:launchMode属性即可,当然也可以指定值为standard。

2.singleTop

单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例, 而是调用 onNewIntent() 方法。

比如:
现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。
如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D
如果这时候给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

singletop 这个可以用来避免多次创建,比如点击一个按钮启动一个activity,如果快速点击多次会导致反复启动,一种办法是在点击事件里过滤,另一个办法是设置目标activity是singletop。

3.singleTask

单一任务栈 , activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空当前activity任务栈上面所有的activity

注意: activity还是运行在当前应用程序的任务栈里面的。不会创建新的任务栈。

比如:

现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。

应用场景:浏览器activity, 整个任务栈只有一个实例,节约内存和cpu的目的。

4.singleInstance

单一实例,整个手机操作系统里面只有一个实例存在。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。与singleTask不同的是singleInstance会新建一个任务栈,这个任务栈只有这么一个实例,而singleTask不会创建新的任务栈。

应用场景:呼叫来电界面 ,不同的应用去打开这个activity 共享同一个activity。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值