您的位置:首页 > 移动开发 > Android开发

Android Activity启动模式分析

2017-09-16 10:36 381 查看

Android Activity启动模式分析

standard 标准启动模式

singleTop 栈顶复用模式

singleTask 栈内复用模式

singleInstance 全局单例模式

standard 标准启动模式

该模式也是Android中activity默认的启动模式,每次启动目标activity时,都会创建一个新的实例,添加到当前的Task中,看下图:原有栈中含有A-B-C三个activity,现在由C启动目标B,则看到在栈顶添加了一个新的实例B。



singleTop 栈顶复用模式

在这个模式中又分为三种情况:

1、在当前栈中已经有了某个activity的实例,并且该activity位于栈顶,在这个时候启动此activity不会创建新的实例,而是复用栈顶实例,通过传入Intent对象,回调onNewIntent()方法.看图:当前task中含有A-B-C三个activity,启动ActivityC时,不在创建新的实例,直接复用位于栈顶的ActivityC。



2、在当前栈中已含有某个activity的实例,但是该activity并不是位于栈顶的情况下,启动该activity时,是和standard模式一样的,会创建新的实例。如图:启动原有栈中的B。



3、在当前栈中不含某个activity的实例时,同样和standard模式一样,创建新的activity实例。如图:原有栈中含有A-B-C三个activity,启动ActivityD时,则在当前栈中新建一个实例。



singleTask 栈内复用模式

在该模式下,关系到一个taskAffinity属性。在Manifest中用android:taskAffinity指定该属性值,启动activity时会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈

1、如果不存在,则会新建一个栈,把新创建的activity实例加入栈中。如图:原有栈中含有A-B-C三个activity,现要从C启动一个ActivityD,而ActivityD声明了android:taskAffinity=”Task1”,会先寻找Task1是否存在,如果不存在,则创建一个新的栈Task1,把ActivityD添加到Task1中。



2、如果存在,如图,原有栈中含有A-B-C三个activity,其中ActivityA定义了android:taskAffinity=”Task”这个属性,当我们要从位于栈顶的C启动A时,这个时候由于Task已经存在,Task中也已经包含了A的实例ActivityA,因此,在这个过程中,位于ActivityA上面的activity会全部出栈,回调onNewIntent()方法启动ActivityA。Task栈中只有一个ActivityA。



注意:上面图的栈中Task是已经含有ActivityA的实例了,假设现在要启动ActivityD,这时候并没有D的实例,所以会在栈顶添加一个D的实例,(即在C的上面添加)如图:



singleInstance 全局单例模式

该模式下启动activity时会开启一个单独的栈存放该activity的实例。栈中要是已存在activity实例,则不会创建新的实例,直接复用,回到onNewIntent()方法,否则会新建一个activity实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android