Android 四种启动模式

前言:

做Android开发已经有三四个年头,因为自己比较懒的缘故很少写这类文档,总觉得有自己超强的的无敌大脑就能记录下所有的技术要点,几天前因为公司有个小朋友要离职,我要面试新员工的技术问题,我准备的第一个面试问题便是Android的四种启动模式,自己在面试前想了下每种模式下不同的压堆栈,竟然有些模糊了,于是我就去晚上看看,有没有写的比较好的启动模式,浏览了半天也没有特别理想的,不是介绍不够全面,就是有错误的地方(有点误人子弟,希望分享文档的小伙版能认真对待,不然能把小白们害惨了),最近公司事情比较少,抽空写下文档,本篇带给大家的是Android的四种启动模式。

说到Android的启动模式,我们都知道Android有四种启动的模式,分别是:standard,singleTop,singleTask,singleInstance,让后我们会想到的是 在AndroidManifest.xml配置文件中配置Activity的launchMode属性,但是即便你真的配置了,singleTask这样的属性,它真的会和其他启动结果不一样吗?我这里很遗憾的告诉你答案是否定的。可能细心的小伙伴已经发现,在使用launchMode的时候需要配合taskAffinity有时候使用才有效果。这里你不必担心为什么会有这样的事情,因为下面我将会告诉你原因。你们是不是觉得说到这里就可以进入正题一展Android的启动模式的风采,那很遗憾的告诉你,你又打错了,哈哈。有些小伙伴可能又猜到了,如果启动模式只能在AndroidManifest.xml配置那不是太low了吗?其实Google的也给我们封装了,在Java代码中配置启动模式的方式,有时候我们需要两种方式配合使用才能达到我们想要的效果。

测试前提条件:我们定义如下类如图:


BaseActivity 中打印了关键的生命周期的日志信息。代码已上传到github上,有兴趣的小伙伴可以自行下载测试。

1.standard-默认模式。

在开发中我们经常用到的就是这种启动方式,大部分时候我们在AndroidManifest.xml中配置一个Activity的时候并不需要设置launchMode属性,如果我们不去设置的话Android系统就会模式为standard启动模式。系统默认使用该模式,每次启动Activity的时候都会创建新的实例。

场景1:我们先将A,B,C,D用标准模式启动依次压栈,然后再用标准模式启动D。我们先用adb shell dumpsys activity activities 命令打印出Acitivity的堆栈信息,打印结果如下图:


根据堆栈信息我们很明显的看到有两个D被压入栈。根据前面的hashCode的不同我们可以判断出这两个D是不同的Activity.

有些同学可能觉得打印堆栈的方式不是很容易理解,那我们再来看下Activity的生命周期方法。


如图

这里我只打印了,onCreate 生命周期方法,小伙伴们都应该知道只有创建新的Activity的时候才会调用这个方法吧,我们可以看到堆栈中先调用了,A的onCreate方法,后面依次是B,C,D,D的onCreate方法,我们主要关注最后一次的D的onCreate的调用,这说明了什么,毫无疑问我们在原来的栈顶D上又新创建了一个D。由此可见standard启动模式是不管当前栈中的压栈是什么样子,都会创建新的Activity,然后压栈。到此标准的启动模式已经讲解完了,不知道小伙伴们还有什么地方不清楚的,欢迎在下面留言。


singleTop- 栈顶复用模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值