在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。
在android里,有4种activity的运行模式,分别为:(standard、singleTop、singleTask和singleInstance)
standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。
singleTop: 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题
singleTask: 来了intent后,检查栈中是否存在该activity的实例,如果存在就把intent发送给它,否则就创建一个新的该activity的实例,放入一个新的task栈的栈底。肯定位于一个task的栈底,而且栈中只能有它一个该activity实例,但允许其他activity加入该栈。解决了在一个task中共享一个activity。
singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。一旦该模式的activity的实例已经存在于某个栈中,任何应用在激活该activity时都会重用该栈中的实例,解决了多个task共享一个activity。
这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。
下面做个测试,有三个Activity之间的跳转:ActivityA 、ActivityB、 activityC。
A------>B------>C------>B------>C------>B;
standard的返回顺序为:B------>C------>B------>C------>B------>A------>launch;
singleTop的返回顺序: B------>C------>B------>C------>B------>A------>launch;
singleTask的返回顺序:B------>A------>launch;
singleInstance的返回顺序:B------>C------>A------>launch;
但是standard和singleTop有一点区别:
例:A------>B------>C------>C------>C;
standard的返回顺序为:C------>C------>C------>B------>A------>launch;
singleTop的返回顺序:C------>B------>A------>launch;方便查看 :-)