安卓四大启动模式之singleTask与singleInstance区别

引言:最近看到很多人说面试必问的安卓四大启动模式,说到启动模式大家都知道这四个启动模式 standard singleTop singleTask singleInstance 这四种,standard 和singleTop都很好理解,这里主要研究一下 singleTask singleInstance的区别,网上很多博主回答都是错误的或不全面的让人误导(主要是对singleTask singleInstance的各说风云)

说一下部分人的错误理解

singleTask(栈中单实例)启动

栈内只有一个Activity实例,栈内已存activity实例,再次启动该activity的时候,Android直接把这个实例栈上面的其他Activity实例GC掉

 假设有三个Activity 分别是A 、B 和C,Activity A 、B的启动模式是standard Activity C的启动模式是singleTask, A->B->C->A->B->C   我们按照这个顺序执行

可以发现 A B C的taskId是相同的,说明A、B和C运行在同一个栈里面,他们的TaskId都是一样的,但是这个栈里从栈底到栈顶的顺序依次是 A—B—C, 只剩下3个实例对象了,lanchMode就起作用了,它删除了两个CActivity中间的 所有实例,把自己放到了顶部。。

singleInstance(全局单实例

(最初接触安卓的时候偷懒看一串解释理解成会将上面的所有实例销毁A、B相继启动到C的时候A都会被销毁仅剩B了)

 假设有三个Activity 分别是A 、B 和C,Activity A 、B的启动模式是standard Activity C的启动模式是singleInstance, A->B->C->A->B->C   我们按照这个顺序执行

通过A启动B-C,可以发现A B的taskId是相同的,与C是不同的,说明B启动C的时候产生了一个新的栈,C运行在一个新的栈里面,时候通过C再次启动A  现在两个栈里面的情况分别是 这样的,原来的栈:A—B 新的栈:C 

运行结果是A-B-A-B-C,singleInstance模式并不会GC他们中间的实例对象,只会创建新的栈taskId,然后通过再次启动C可以发现在新的栈里并没有产生新的C的实例  新的栈依旧是:C 只不过C被显示到了最前面;

总结:singleTask 和singleInstance的区别是:singleTask不会产生新的栈, singleInstance第一次调用的时候就会产生新的栈, singleTask模式下 如果原来的栈里已经存在要调用的Activity的实例,下次调用的时候会销毁中间所有的Activity,singleInstance模式不会销毁其他的实例,只会回到栈顶。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YBZha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值