【笔记】Activity四种启动模式区别

参考:https://blog.csdn.net/edisonchang/article/details/49981457


activity 启动的四种模式 :

AndroidManifest.xml :: android:launchMode="???"

1.standard:【不会检测ACTIVITY 是否重复】
       Activity的默认启动模式,在这种模式下启动的activity可以被多次实例化,即在同一个任务栈中可以存在多个activity的实例,每个实例都会处理一个Intent
    对象。
       如果Activity A的启动模式为standard,并且A已经启动,在 A 中再次启动Activity A,会在 A 的上面再次启动一个 A 的实例,即当前的桟中的状态为A–>A。
       
2.singleTop:【相同ACTIVITY 且同时位于堆栈顶端(top)时才会重复处理,其他情况同于standard】
    和standard模式很像,唯一的区别在于,如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。 
    如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。
    
3.singleTask:【一个堆栈仅可以有可以实例的task,顶出其他activity】
    这种启动模式的Activity 会在其所在的任务栈中始终保持只有一个实例。    当启动这个Activity的时候,系统会搜寻系统中现存的任务栈,如果有任务栈中没有该Activity的实例,则会创建这个Activity属于的任务栈,并正常创建该Activity实例,否则会把这个任务栈调到前台,且会将任务栈中其实例以上的所有Activity出栈,并调用该实例的onNewIntent()方法将Intent对象传递到这个实例当中。
    
4.singleInstance【一个系统仅仅一个这样的ACTIVITY】
    是singleTask的特殊情况,总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。同一时刻在系统中只会存在一个这样的Activity实例。不同之处在于系统会对这种模式下的Activity单独创建一个新的任务栈,由于其作用域不仅仅在栈内,所以后续的任何启动都不会再次创建新的Activity实例。
    
    
    
    
    
    
    在 ActivityStarter.startActivityUnchecked()   函数中进行检测的:
    

猜你喜欢

转载自blog.csdn.net/pirionFordring/article/details/83417146