Activity启动模式

420 阅读2分钟

Activity的启动模式(launchMode)有四种,standard,singletop,singletask,singleinstance,可以在AndroidManifest里面制定Activity的启动模式,一般不指定的话默认为standard。一个应用程序会有很多的Activity,系统会通过Activity栈来管理这些Activity,栈是一种先进后出的集合,当前的Activity在栈顶,按下back键,栈顶的Activity就会退出。

1.standard模式

standard模式是Activity的默认启动模式,默认每次打开Activity都会创建一个新的实例,无论栈中存不存在这个Activity。

用一个button来启动MainActivity本身

                              **每次都是onCreate启动它本身**

2.singleTop模式

singletop模式的Activity跟standard模式类似,不同的是,如果Activity在栈顶,则不会创建新的Activity实例,如果不在就会创建新的实例。 我们同样使用上面的例子,用一个button来启动它。

           使用onNewIntent方法来启动,我们也可以在这个方法中做相关处理

3.singleTask模式

singletask模式在一个栈内只有一个实例,如果Activity位于栈顶,则不会创建新的实例,如果Activity不在栈顶,则会将Activity之上的实例全部出栈,我们用一个button启动secondActivity,然后再启动MainActivity。

singletask和前面两种启动模式最大的不同是,singletask启动模式是任务栈内单例的,只会存在一个例如你的某个Activity里面有一个列表,如果有多个实例,有可能导致用户看到的列表不一致,有的Activity需要经常启动,如果每次都创建实例,会导致占用资源过多,这些情况都可以使用singleTask模式,但启动singleTask模式的Activity会导致任务栈内它上面的Activity被销毁,有可能会影响用户体验,使用时要注意。

4.singleInstance模式

singleinstance也是单例的,但是和singletask不同的是,singleinstance是在整个系统中单例的,也就是说在一个任务栈里只有一个Activity,启动singleinstance 的Activity时,系统会创建一个新的任务栈,并且这个任务栈只会存在一个Activity。缺点是,启动时会慢一点,影响用户体验。