正文
l
aunchMode 研究
launchMode简介
launchMode 是Activity类的一个属性,该属性包括4个具体值:standard、singleTop、singleTask、singleInstance。我们都知道,android系统中启动Activity是通过Intent实例进行的,当系统收到一个Intent的实例需要去启动指定的Activity的时候,android系统会根据目标Activity的该属性值来决定是要要创建新的该Activity实例以及如何在Task中创建该Activity的实例。这就是launchMode这个属性的作用。
launchMode 分为两个类别
官方文档对4中启动模式描述如下:
使用场景
|
启动模式
|
是否可以有多个实例?
|
简介
|
普通类型
|
standard
|
是
|
系统默认的启动模式,当系统接收到一个Intent实例去启动一个standard模式的Activity时,系统总是会在目标栈的顶部创建一个新的activity实例,并把Intent的实例传进去。
|
普通类型
|
singleTop
|
视具体情况
|
当系统接收到一个Intent实例去启动一个singleTop模式的Activity时,如果在目标栈的顶部存在一个该Activity的实例的话,那么系统就会重用这个Activity的实例而不创建新的实例,并回调该Activity的onNewIntent(Intent intent)方法把新的Intent实例当作方法参数传递进去;如果在目标栈的顶部没有该Activity的实例的话系统将会在新建一个Activity实例,与standard的行为就一样了。
|
特殊类型
|
singleTask
|
否
|
当系统接收到一个Intent实例去启动一个singleTask模式的Activity时,如果不存在该Activity的实例的话,系统会先创建一个新的Task,并在该Task底部里面创建一个该Activity的实例,随后把Intent实例传递进去;如果已经存在一个该Activity的实例的话,系统就不会再创建新的实例,那么系统就会重用这个Activity的实例而不创建新的实例,并回调该Activity的onNewIntent(Intent intent)方法把新的Intent实例当作方法参数传递进去,同时,该Activity实例所在的Task将会被调到前台
|
特殊类型
|
singleInstance
|
否
|
类似于singleTask,唯一不同的地方在于,singleInstance的Activity不允许自己的Task中存在其他的Activity实例,也就是说singleInstance的Activity永远是Task中唯一的一个Activity实例
|
launchMode 的定义