Android Activity启动模式分析

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实例。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值