activity的四种启动模式:standard、singleTop、singleTask、singleInstance
android的每个界面都是一个activity,来回之间的切换就是activity的启动与切换。
设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置android:launchMode属性即可。
下面分别介绍四种启动模式:
1、standard(默认):
默认启动模式,每次启动Activity时都会创建一个新的Activity,并放入任务栈中。在一个任务栈中可以有相同的实例,也允许多个相同的activity叠加。 例:A启动---B启动----A启动,那么栈中的顺序为:ABA;如果按back键,它会按照栈中的顺序依次退回。 2、singleTop: 任务栈中可以存在多个实例activity,但是不允许相同的两个activity相邻叠加。如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,即:当Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。否则就会创建新的实例并放入栈顶。(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
例:任务栈中现有ABC三个activity,当打开C实例时,不是创建新的实例,而是调用C实例的onNewIntent()方法。
3、singleTask:当打开一个实例时,如果在栈中已经有该Activity的实例,就会调用实例的onNewIntent()方法重用该实例。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。 如果栈中不存在该实例,将会创建新的实例放入栈中。 例:栈中现有ABC三个实例,打开A实例时,调用A实例的onNewIntent()方法同时移出A实例上面的B、C实例,现在栈中只有A实例。 4、singleInstance: 只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例; 例:应用1中有A、B实例,应用2中有C实例,当应用1要创建实例C时,不需要创建新的实例,直接共享应用2中的C实例。