博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题 之 『 Activity启动模式 』
阅读量:6238 次
发布时间:2019-06-22

本文共 1656 字,大约阅读时间需要 5 分钟。

终于撇开恶心的业务代码,有时间来复习下android知识了,笔者也属于那种,间歇性雄心斗志,持续性混吃等死,的人,每天加班干到深夜,都 ™ 没时间学习,复习一些知识了,本篇文章也是一种记录,一种备忘,要是一不小心帮助到了别人,想必也是极好的,笔者知识有限,也在学习,难免纰漏,万望海涵,请指正,行,废话就到这儿吧!


Activity启动模式:

什么? 朕的大秦灭亡啦? 你™ 还在讲这种垃圾知识点?

冷静下大兄弟

这种知识点,大家都知道,但是面试,尤其是那种中小型公司问一些基础时,冷不丁给你问一句,4种启动模式,虽然都差不多,但有些细微的差别,很容易搞混淆,完全可以不用细究,直接收藏保存,以后想看的时候过一遍就行。笔者也是,老是记不住(也没必要记),需要的时候翻出来看看就行。这也是我记录的原因。

Standard模式:

这是最普通,系统默认的启动方式,一般我们开发如果没有特殊需求这种模式是使用的最多的,startActivity的时候Activity依次入栈,按下返回键 后进先出 依次回退。类似于这样:

standard模式

这里给大家推荐一个 ADB 命令可以直接查看到Activity的堆栈信息:adb shell dumpsys activity

这个时候我们可以看见,只有一个Activity栈,栈中的Activity排列,以及顶部的Activity(FourthActivity)

Standard模式堆栈信息


SingleTop模式:

该模式和standard模式只有一点点区别:

  • 该Activity在栈顶:

    • 如果该Activity就在栈顶, 那么再次startActivity的时候,并不会再开一个Activity而是,直接重新走该Activity的onNewInstance方法!

  • 该Activity不在栈顶:

    • 由其他Activity去startActivity 该Activity,那么走的还是standard模式的规则

    就像这样:

SingleTop模式

这里面的A_Activity就是singleTop启动模式,且我们可以从前后两个堆栈信息里面看到Activity的情况:

这里我们有4个Activity 分别为A、B、C、D,其中B为SingleTop模式,

  • 正常情况:A->B->C-D
    singleTop正常情况

singleInstance模式:

  • 栈顶再次启动自己:A->B->B:
    正常情况SingleTop

这个时候,不会在去启动新的B,而是直接走了onNewIntent方法。

SingleInstance模式:

该模式下的Activity会被 放入一个新的栈中,并且 该栈中,仅只有该Activity。

就像这样:

  • A启动B发现B没有实例,直接开辟新栈并将其放入。
  • B在启动C,发现C是标准启动模式,将B放入标准模式的栈中。
  • C、D、A、启动B,发现已经存在新栈中,这时候B会被呈现给用户,并且回调onNewIntent方法。
  • 标准栈中,依次回退,直到没有Activity之后,才会回到B所在的栈中。

singleInstance模式

通过ADB命令查看:

singleInstance的堆栈信息

SingleTask模式:

SingleTask模式

  • 该模式下的Activity会被放入一个新栈中,且处于栈底。
  • 该模式下的Activity再次启动别的Activity会被放入当前栈。
  • 该模式下的Activity启动自己,会走onNewIntent
  • 该栈中的其他Activity启动singleTask模式的Activity,其Acitivity上面的所有Activity会被清理掉。

如果使用过该模式的同学应该都遇到过坑,直接设置Androidmanifest.xml文件中的launchMode之后启动发现并不是在一个新的栈中:

singleTask坑
什么情况? 不是在一个新的栈中吗? 其实通过源码研究,在ActivityStack中会对被启动的Activity的taskAffinity进行判断所造成的,对于想深入研究的请移步。,对于这个问题google官方也有一些说明。该模式不适合大多数应用。

既然这样, 我们给被启动的Activity加上属性taskAffinity类似于这样:

完成之后再来看看堆栈信息:

singleTask堆栈信息




转载地址:http://dzkia.baihongyu.com/

你可能感兴趣的文章
OpenStack 开始衰落了吗?
查看>>
[lcm] Qualcomm Android Display Subsystem 架构
查看>>
Django REST framework 的TokenAuth认证及外键Serializer基本实现
查看>>
PostgreSQL 图像搜索插件使用篇
查看>>
无线网络便利 无线安全堪忧
查看>>
选择云存储 不重视这八个问题就会吃亏
查看>>
云计算在大型企业迅猛发展
查看>>
国内首个国际云计算博览会落户重庆
查看>>
【天池直播】O2O大赛冠军经验分享
查看>>
IDC:物联网计划对IT基础设施影响重大
查看>>
浪潮服务器撑起食品质量安全追溯物联网 力保舌尖上的安全
查看>>
七牛小伙伴|小咖秀的产品构建经验谈
查看>>
大数据时代下的意图搜索 个性化服务是关键
查看>>
这些技术可能会阻碍你在大数据征程上的步伐
查看>>
大数据融合将解锁物联网真正潜力
查看>>
不止提供上网服务 WiFi技术有了新功能
查看>>
云服务再次歇菜数易云备系统从容应对
查看>>
智能数据湖势在必行
查看>>
如何防止rogue server破坏数据中心
查看>>
首席信息官面临的三个云计算咒语
查看>>