Activity的启动模式决定了Activity被激活时,如何添加到任务栈
注:任务栈(Task Stack)
任务栈记录了当前应用程序里打开的若干个Activity,当按下Back键时,将根据任务栈里的Activity的顺序来决定将要被显示出来的Activity。
当新的Activity被激活时,伴随着“压栈”操作,原有任务栈里所有Activity都被“压”下去,同时,新的Activity将位于栈顶,而栈顶的Activity将是前台显示的Activity,即运行态
通过AndroidManifest.xml中的Activity节点的LaunchMode属性可以配置每个Activity的启动模式。
- standard:标准模式(默认)
standard模式的Activity可以被反复激活,且每次激活的都是新的Activity对象。 - SingleTop:栈顶唯一
如果Activity已经位于栈顶,再次激活时,不会创建新的Activity对象,反之,如果被激活的Activity没有处于栈顶,则还是会创新新的Activity对象。 - SingleTask:栈内唯一
被激活的Activity位于栈顶,且在站内只有1个,即如果当前任务栈没有该Activity,则直接创建并压栈,当被激活的Activity自然处于栈顶位置,如果当前任务栈中已经存在该Activity,则在栈中该Activity之上的所有Activity被强制出栈(被销毁),且被激活的Activity自然弹栈,获得栈顶位置,显示在前台。 - SingleInstance:单例
被激活的Activity在任务栈绝对有且仅有1个,处于该模式下的Activity将独立存在与一个专属的任务栈中。
注意:当Activity的启动模式(lanchMode)被配置为singleTask或singleInstance时,Activity归属于哪个任务栈,取决于Activity的taskAffinity属性,该属性是通过AndroidManifest.xml进行配置的