Activity的启动模式

对于Activity的四种启动模式大家应该都很熟悉~~面试中也经常会被问过的问题。
1、standard(标准模式)
2、singleTop(栈顶复用模式)
3、singleTask(栈内复用模式)
4、singleInstance(单实例模式)

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

 <activity
                android:name="com.activity.MainActivity"
                android:launchMode="standard"/>

一般我们不设置的时候就是默认的standard模式。大多数用得最多的也是此种模式。但是合理的利用
Activity的启动模式,可以提高我们的开发效率。

1、standard(标准模式)
我们的程序采用的最多的就是这种模式,默认什么都不写的情况下就是这种模式。在这种模式下每次都会
new一个新的实例。如Activity1中打开Activity1,会再new一个Activity1,按返回键一个个退出。

2、singleTop(栈顶复用模式)
每个处于栈顶的Activity可以激活自己。非栈顶的不行。

若我有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,
唯一不同的是B1为standard,B2为singleTop。
若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,
实际只调用了前一个的onNewIntent方法)
若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。

3、singleTask(栈内复用模式)
如果要激活的那个Activity是singleTask的模式并且是在任务栈中存在实例,则不会创建新的实例,
现在只需要把Activity上面的实例清除掉,也就是clear pop。

比如有栈内有ABCD四个Activity,A位于栈顶,D位于栈顶,C为SingleTask模式。现在在A中启动C,
那么现在栈中的顺序应该是CD。

这种模式也阔以应用于退出程序。。。
将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的
onNewIntent函数,并在函数中加上一句finish。

4、singleInstance(单实例模式)
这是一种加强的SingleTask模式,除了具有SingleTask的特性外,还有一点,就是具有这种模式的Activity
只能单独存在于一个任务栈中。

比如现在有ABC三个Activity,B是SingleTask模式,现在在A的taskId为100,那么启动B,会开辟一个新的
task,taskId为101,(但是由于栈内复用的特性,101栈内不会再创建新的Activity,除非这个独特的任务
栈被系统摧毁了)再启动C的话就位于taskId为100的栈内了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值