1.standard:系统默认的启动方式。
在这种模式下,新启动的Activity总是置于栈顶,如下图所示。
如果按返回键,则xxxActivity从上往下依次弹出。
2.singleTop
启动新的xxxActivity时,先检测栈顶是否是xxxActivity的实例,如果是则不新建继续使用,否则在栈顶新建一个xxxActivity的实例。
注意:如果栈顶是xxxActivity的实例,那么xxxActivity的onNewIntent(Intent intent)方法会被触发。
3.singleTask
启动新的xxxActivity时,从栈顶向栈底扫描。如果发现有xxxActivity得实例,则将该xxxActivity上方的所有Activity统统弹出栈;否则在栈顶新建xxxActivity的实例。
例子:假设Activity2的启动模式为singleTask,在左图中再次启动Activity2的时候,发现栈中有Activity2的实例,所以会把该实例上方的Activity3弹出去,结果如右图所示。
注意:左图中Activity2的onNewIntent(Intent intent)方法会被触发。
4.singleInstance
这个是最复杂的一个,选用该模式的Activity会单独占用一个栈。
现在假定如下Activity
Activity | 启动模式 | 主要功能 |
Activity1 | standard | 启动Activity2 |
Activity2 | singleInstance | 启动Activity3 |
Activity3 | standard | 启动Activity2 |
进行操作:
(1)先启动Activity1,然后在Activity1中启动Activity2,此时栈结构如下图所示:
没错,此时Activity1和Activity2在不同的栈里面!
(2)接着在Activity2中启动Activity3,栈结构将变为以下状态:
(3)此时手机展示的界面为Activity3,现在在Activity3中启动Activity2,栈结构如下:
栈结构没有改变!但Activity2中的onNewIntent(Intent intent)方法被触发了。
(4)此时展示的界面为Activity2,再次启动Activity3,栈结构将调整如下:
(5)此时展示的界面为Activity3,然后进行以下操作:
操作 | 展示界面 |
按1下返回键 | Activity3 |
再按1下返回键 | Activity1 |
再按1下返回键 | Activity2 |
再按1下返回键 | 主屏幕 |