Activity的启动模式

1.Activity启动模式

在Android系统中,Activity的四种启动模式

  • standard(默认)
  • singleTop
  • singleTask
  • singleInstance

该四种启动模式在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的启动模式_第1张图片

Activity A启动模式为standard,即默认值,每次调用startActivity,会重新生成一个新的Activity A的实例,且生成的实例位于栈顶。

3.2singleTop

Activity的启动模式_第2张图片

该模式下,与standard类似,但唯一区别是,当Activity B位于栈顶时,启动startActivity B 不会重新生成一个新实例,而是重用栈顶实例。如果不位于栈顶,则与standard一样。

3.3singleTask

Activity的启动模式_第3张图片

假设Activity A启动模式为singleTask ,一个任务中只存在一个Activity A,但它不位于栈顶时,则将它上面的所有Activity 出栈,使Activity A处于栈顶。

4.singleInstance

Activity的启动模式_第4张图片

如果Activity A启动模式为singleInstance ,启动Activity A时,则在新的Task中启动一个Activity A ,即一个新栈,它是全局量。出栈顺序,如果当前位于A,则出栈顺序为A-C-B

,如果启动A后又回到C,则出栈顺序为C-B-A

 

你可能感兴趣的:(Activity)