Activity四种启动模式杂谈

Activity作为四大组件之一,其重要性不言而喻。在介绍他的启动模式之前我们先来了解一个知识点就是-任务栈。栈是一种数据结构,他的特点是先进后出,就像子弹放入弹夹一样,先放入的子弹最后才会被打出来。每启动一个activity,就会被放入任务栈的栈顶,后面打开的activity会把原来的顶下去。任务栈的作用是Android系统记录用户行为的。当任务栈中的activity被清空时,应用就退出了。

第一种启动模式:standard

标准启动模式:他是一种默认的启动模式,不需要进行设置;特点是每打开应用的一个activity就会在栈中创建一个activity的实例,Activity四种启动模式杂谈

第二种启动模式:singleTop

栈顶复用模式:如果我们打开一个activity的时候,如果栈顶已经有这个activity的实例那么就不会重新创建一个新的activity,这种模式应用场景有:QQ接收消息会弹出一个界面,如果有100条不可能弹出一百个界面吧;
Activity四种启动模式杂谈

第三种启动模式:singleTask

单一任务栈模式:只要栈中存在我们要打开的activity的实例,就不会创造新的实例,他会把位于其上的activity清除,使自己位于栈顶。比如我们在一个应用中依次打开了activity A,activity B ,activity C ,activity D,现在我们要重新打开activity B,因为任务栈中存在activity B的实例,所以将activity C和activity D清除,让activity位于栈顶。如图
Activity四种启动模式杂谈
应用场景:浏览器主界面,不管多少个应用程序打开浏览器,都只用一个主界面。如果一个activity的性能开销过大的话,可以使用这种模式启动

第四种启动模式:singleInstance

单一实例模式,这种模式有点特殊,他的activity实例是存放在一个单独的任务栈中的,与应用的任务栈不是同一个。两个任务栈的循序为存放当前的界面的activity的任务栈。应用场景:电话的来电界面

Activity四种启动模式杂谈

启动模式的设置

1.在清单文件中:在activity 的属性中添加字段

launchMode:”启动模式”
2在代码中配置:通过 intent.addFlags()方法进行设置。

区别:

1.第一种方法是 Activity 对其自身的要求以何种模式启动。第二种方法是上一个 Activity 对它的要求以何种模式启动。
2.第二种启动方式的优先级高于第一种。
3.第一种无法直接为Activity设置为FLAG_ACTIVITY_CLEAR_TOP,第二种方式无法为Activity指定singleInstance模式