启动模式(Launch modes)

来源:互联网 发布:java从入门 pdf 编辑:程序博客网 时间:2024/05/20 17:08

<activity>下的launchMode属性可以设置四种启动方式:

standard (默认模式)

singleTop

singleTask

singleInstance

区别:

(1) 响应Intent时Activity将被装入哪个task:

对于standard和singleTop模式,由产生该Intent(调用startActivity())的task持有该Activity——除非Intent对象里含有FLAG_ACTIVITY_NEW_TASK标志,那么就像前面章节讲的那样的寻找一个新的task。

对于singTask和singleInstance模式,总是标志Activity为task的root Activity,开启这样的活动会新建一个task,而不是装入某个正在运行的任务。

(2) 一个Activity是否可以有多个实例:

一个standard或者singleTop属性的Activity可以实例化多次,可以属于多个不同的task,而且一个task也可以含有相同Activity的多个实例。相反的,singleTask或者singleInstance属性的Activity只能有一个实例(单例)。因为这些Activity是位于task的底部。

(3) 实例是否能允许在它的task里有其他的Activity:

一个singleInstance属性的Activity是它所在的task里仅有的一个Activity,如果他启动了另一个Activity,那个Activity会被加载进一个不同的task而无视它的启动模式。一个singleTask属性的Activity总是一个task里的root Activity,但是他可以启动另外的Activity并且将这个新的Activity装进同一个task里,standard和singleTop属性的Activity可以出现在task的任何位置。

(4) 是否创建一个新的Activity实例来处理一个新的Intent:

对于默认的standard方式,将会生成新的实例来处理每一个新的Intent。每个实例处理一个新的Intent。对singleTop模式,如果一个已经存在的实例在目标task的栈顶,那么就重用这个实例来处理这个新的Intent,如果这个实例存在但是不在栈顶,那就不重用他,而是重新创建一个实例来处理这个新的Intent并且将这个实例压入栈。

一个"singleTask"或"singleInstance"模式的activity只会有一个实例, 这样它们的实例就会处理所有的新intent。一个"singleInstance" activity总是在栈里的最上面(因为它是task里的唯一的activity), 这样它总是可以处理一个intent。而一个"singleTask" activity在栈里可以有或没有其他activity在它上面。如果有的话,它就不能对新到的intent进行处理,intent将被丢弃。(即使intent被丢弃,它的到来将使task来到前台,并维持在那里。)


原创粉丝点击