理解Activity的启动模式

简介: Activity的启动模式有哪几种,分别用于什么场景?standard:标准模式系统的默认模式。一种典型的多实例实现。每次启动一个Activity都会重新创建一个新的实例。

Activity的启动模式有哪几种,分别用于什么场景?

  • standard:标准模式

系统的默认模式。一种典型的多实例实现。每次启动一个Activity都会重新创建一个新的实例。被启动的Activity会被放入启动者的栈中,如果启动者是非Activity类型的Context(如ApplicationContext),并没有所谓的任务栈,就会报错,此时需为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,创建一个新栈。没有特殊需求默认是这种模式。

  • singleTop:栈顶复用模式

如果一个Activity的实例已经在栈顶存在,启动这个Activity时,不会创建新的Activity,而会回调onNewIntent(),如果不是在栈顶存在,则会新建一个实例。
适合接收通知启动的内容显示页面。当收到多条新闻推送时,用于展示新闻的Activity设置成此模式,根据传来的intent数据显示不同的新闻信息,不会启动多个Activity。

  • singleTask:栈内复用模式

一个单实例模式。只要Activity的实例在一个栈中存在,再次启动Activity都不会重新创建实例只会回调onNewIntent(),并从栈中弹出实例上面所有的实例。
适合作为程序入口点,例如浏览器的主界面。不管从多少个不同应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

  • singleInstance:单实例模式

具有singleTask的所有特性,设置此模式的Activity只能单独存在一个任务栈中。

清晰地描述下onNewIntent和onConfigurationChanged这两个生命周期方法的场景?

onNewIntent

在singleTop、singleTask、singleInstance模式下,启动相同的Activity,期望只有一个实例存在,再次启动就会调用onNewIntent()。在onNewIntent中可以setIntent(intent)刷新intent数据。

onConfigurationChanged

当Android设备正在运行App时,如果设备的语言、屏幕方向、键盘的参数改变了,默认会销毁当前Activity并重新创建一次来加载新的配置信息。为了防止Actitvity被系统销毁,可以在AndroidManifest.xml文件中给<Activity>标签设置android:configChanges,可选值如下:

属性值 含义
mcc SIM卡唯一标识IMSI(国际移动用户标识码)中的国家代码,由三位数字组成(中国为460)。 这里表示mcc发生了改变
mnc SIM卡唯一标识IMSI(国际移动用户标识码)中的运营商代码,由两位数字组成,中国移动TD系统为00,中国联通为01,电信为03。这里表示mnc发生了改变
locale 设备的本地位置发生了改变,一般指的是切换了系统语言
touchscreen 触摸屏发生了改变
keyboard 键盘类型发生了改变,比如用户使用了外接键盘
keyboardHidden 键盘的可访问性发生了改变,比如用户调出了键盘
navigation 系统导航方式发生了改变
screenLayout 屏幕布局发生了改变,很可能是用户激活了另外一个显示设备
fontScale 系统字体缩放比例发生了改变,比如用户选择了个新的字号
uiMode 用户界面模式发生了改变,比如开启夜间模式-API8新添加
orientation 屏幕方向发生改变,比如旋转了手机屏幕
screenSize 当屏幕尺寸信息发生改变(当编译选项中的minSdkVersion和targeSdkVersion均低于13时不会导致Activity重启)—API13新添加
smallestScreenSize 设备的物理屏幕尺寸发生改变,这个和屏幕方向没关系,比如切换到外部显示设备—API13新添加
layoutDirection 当布局方向发生改变的时候,正常情况下无法修改布局的layoutDirection的属性—API17新添加

申明的配置发生改变时,将不会重启Activity,而是回调onConfigurationChanged。如果设置orientation,当屏幕方向发生旋转时,会阻止系统销毁Activity重建,而是保持运行,回调Activity的onConfigurationChanged(),我们需要在这个方法中自己处理旋转后的操作。onConfigurationChanged中会传入一个Configuration对象,通过读取对象中最新的配置信息,来自行适配新的UI界面。

从Android 3.2 (API13) 开始,当设备旋转时,screenSize也会改变,因此需要设置android:configChange="orientation|screenSize"

驭鲲
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
为加速AI应用在企业市场落地,4月9日,阿里云在北京召开AI势能大会。阿里云智能集团资深副总裁、公共云事业部总裁刘伟光发表主题演讲,大模型的社会价值正在企业市场释放,阿里云将坚定投入,打造全栈领先的技术,持续开源开放,为AI应用提速。
如何查看yum 安装的软件路径(不要再忘了)
如何查看yum 安装的软件路径 今天使用yum 安装了一个软件,后来没有找到路径 1、首先安装一个redis [root@iZbp1eem925ojwyx17ao9kZ ~]# yum install redis 2...
2160 0
人工智能:重塑未来,驱动效率革命
人工智能(AI)是模拟人类智能的技术,让计算机执行需智能才能完成的任务,如理解语言、学习和推理。通过复杂算法,AI能分析大量数据并作出决策。例如,使用`scikit-learn`库训练分类器识别鸢尾花种类。AI未来发展将涉及技术创新如深度与强化学习、应用拓展至医疗健康、智能制造等领域、以及社会影响如就业结构变化和教育变革。AI的优势包括自动化流程、高效数据分析、智能决策、个性化服务及跨领域融合,这些均显著提升了工作效率和社会发展。
自动化运维:使用Ansible进行批量服务器配置
【8月更文挑战第31天】 在现代IT基础设施中,高效、一致且可靠的服务器管理是至关重要的。本文将引导你通过Ansible这个强大的自动化工具来简化你的日常运维任务,从而让你能够更加专注于业务的核心价值。我们将从Ansible的基础讲起,逐步展示如何利用它来执行批量服务器配置,包括安装软件、更新系统以及部署应用。准备好让你的运维工作变得更加轻松和高效吧!
ARIMA模型、随机游走模型RW模拟和预测时间序列趋势可视化
ARIMA模型、随机游走模型RW模拟和预测时间序列趋势可视化
【运维杂谈】Nginx部署项目,上传文件报错413,如何解决?
【运维杂谈】Nginx部署项目,上传文件报错413,如何解决?
832 0
在IDEA工具中常见的一些Maven操作<第六课>(二)
在IDEA工具中常见的一些Maven操作<第六课>(二)
287 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问