1.Activity启动模式
在Android系统中,Activity的四种启动模式
该四种启动模式在AndroidManifest.xml中配置每一activity中参数设置android:launchMode
2.模式特征
standard:该模式下,每次通过通过Intent启动时,都会生成一个新的实例。android:launchMode 没有配置下,默认为standard。
singleTop:该模式与standard类似,区别是如果当前Activity位于栈顶时,intent启动该Activity时则不会生成新的实例,重用原来实例。但是如果该Activity当前不位于栈顶的话,就重新生成一个新的实例。如果显示地指定intent的参数FLAG_ACTIVITY_NEW_TASK,会启动到别的任务重去。
singleTask:该模式下,Activity只会有一个实例。如果某一个任务中已经有该Activity的一个实例存在,则不再启动新的,每次都会被重新使用,重用就是如果该Activity在Task的栈底,会被调到栈顶。
singleInstance:该模式和singleTask一样,唯一区别是,该模式下,Activity会独立拥有一个task,不会和其他Activity公用,每次Activity都被重用,且全局只能有一个实例。
3.Activity在栈中的情况分析
3.1standard:
Activity A启动模式为standard,即默认值,每次调用startActivity,会重新生成一个新的Activity A的实例,且生成的实例位于栈顶。
3.2singleTop
该模式下,与standard类似,但唯一区别是,当Activity B位于栈顶时,启动startActivity B 不会重新生成一个新实例,而是重用栈顶实例。如果不位于栈顶,则与standard一样。
3.3singleTask
假设Activity A启动模式为singleTask ,一个任务中只存在一个Activity A,但它不位于栈顶时,则将它上面的所有Activity 出栈,使Activity A处于栈顶。
4.singleInstance
如果Activity A启动模式为singleInstance ,启动Activity A时,则在新的Task中启动一个Activity A ,即一个新栈,它是全局量。出栈顺序,如果当前位于A,则出栈顺序为A-C-B
,如果启动A后又回到C,则出栈顺序为C-B-A