在咱们的activity配置中会有一个launchMode的配置项,初次遇到的的同学都没把这个当回事,但在实际开发中我们都会去使用它,它到底是个什么飞机呢?它是用于指定当前activity的启动模式的,启动模式又是个啥呢?下边做个简单介绍。
开门见山,启动模式有四种standard、singleTask、singleTop、singleInstance。
standard:
标准模式。这个是activity默认的启动模式,没有对其启动模式进行改变时,系统默认给activity的启动模式,它允许存在多个实例,你爱怎么创建怎么创建,随便hi。
singleTop:
栈顶复用模式。如果当前的activity位于栈顶,那此时再启动这个acivity,启动模式为singleTop,那么此时会执行它的onNewInten方法,但是其onCreate、onStart不会被执行,因为它并没有被重新创建。有的同学看到这些描述可能有些懵,我们举个例子,如果当前任务栈中存在AB两个activity,A位于栈底,B位于栈顶,此时我们再次启动B,那么实际当前任务栈中还是为AB,因为B在栈顶,而我们当前又启动的是B,栈顶复用,则B并没重新创建,还有一种情况如果我当前启动的是A,那么此时任务栈中则是ABA,因为A位于栈底,不能复用原则,因此会重新创建实例。简而言之,如果B位于栈顶的时候,只会有ABAB这种情况出现,则不会出现ABB。
singleTask:
栈内复用模式。也视为一种单实例模式,使用这种模式,多次启动这个activity都不会创建新的实例,也会去执行onNewInten方法,举个例子,在该模式下,我们去打开Activity A,那么系统去寻找是否有属于A的任务栈,如果没有则创建A的实例,然后把它塞入任务栈中,反之如果有A的任务栈,则不管它位于栈中哪个位置,都把它放到栈顶,并调用onNewInten方法。
singleInstance:
单实例模式。singleTask鸡血版,,使用此启动模式下,这个Activity会单独运行在一个任务栈中,举例,Activity A为该启动模式,那么启动A后,系统会单独为他创建一个任务栈,A独自在这个任务栈中运行,直接包场,由于栈内复用,因此后续再启动A也不会去创建新实例,因为它已经存在了。但是除非这个任务栈被系统销毁的情况出现。
以上为自己学习后的归纳,如有错误请指正,本来打算画图的,这个编译器画图好麻烦 。