Activity的启动模式

本文深入解析了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance的特点及应用场景,同时介绍了IntentFlags的使用及onNewIntent和onConfigurationChanged方法的触发条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的启动模式

一、启动模式有几种,分别用于哪些场景
  • 1、standard 默认模式

    系统默认的启动方式,这个启动方式每次都会创建新的实例,每次点击standard模式创建activity后,都会创建新的activity覆盖在原activity上

  • 2、singleTop

    在启动时,系统会判断当前栈顶activity是不是要启动的activity,如果是则不会创建新的activity而直接引用这个activity;如果不是则创建新的activity。

    通常用于接收到消息之后显示的界面。

    这个启动方式虽然在栈顶存在目标activity的时候不会创建新的实例,但是会在启动时调用onNewIntent()方法。

    目标activity A

    不会创建:A-B 栈顶是A

    会创建: B-A 栈顶是B

  • 3、singleTask

    和singleTop相似,只不过singleTop是检测栈顶元素是否是需要启动的activity,而singleTask是检测整个activity栈中是否存在当前需要启动的activity,如果存在则将该activity置于栈顶,并将activity以上的activity都销毁。
    如果启动的模式为singleTask的activity已经在后台一个任务栈中,那么启动后,后台的这个任务栈将被切换到前台,

    这种模式适用于退出整个应用:
    将主activity设为singleTask模式,然后在要退出的activity中转到主activity,从而将主activity之上的activity都清除,然后重写主activity的onNewIntent(),在方法中加上一句finish(),将最后一个activity结束掉。

    目标Activity A

    不会创建:

    A-B 栈顶是A

    B-A 栈顶是B,打开A是会把B销毁

    会创建 : B-C 栈中不存在A,会创建

  • 4、singleInstance

    类似浏览器工作原理
    申明为singleInstance的activity会出现在一个新的任务栈中,而且该任务栈中只存在这一个activity。

    常用于需要与程序分离的界面

二、Intent Flag 启动模式
  • Intent.FLAG_ACTIVITY_NEW_TASK

    使用一个新的Task来启动一个Activity,当启动的每个Activity都将在一个新的Task中。

    该Flag通常使用在从Service中启动Activity的场景,由于在Service中并不存在Activity栈,所以使用该Flag来创建一个新的Activity栈,并创建新的实例

  • Intent.FLAG_ACTIVITY_SINGLE_TOP

    使用该Flag来启动一个activity,与指定 Android:launchMode=“singleTop”效果一样

  • Intent.FLAG_ACTIVITY_CLEAR_TOP

    使用该Flag来启动一个activity,与指定 Android:launchMode=“singleTask”效果一样

  • Intent.FLAG_ACTIVITY_NO_HISTORY

    使用该Flag启动activity,当该activity启动其他activity后,该activity就会消失了,不会保留在activity栈中,

三、清晰地描述下 onNewIntent 和 onConfigurationChanged 这两个生命周期方法的场景?
  • 1、调用onNewIntent的场景:

    (a)启动模式SingleTop,如果栈顶是目标Activity时则调用onNewIntent

    (b)启动模式SingleTask,如果栈内存在目标Activity是则不会创建实例,调用onNewIntent

  • 2、调用onConfigurationChanged

在manifest 声明的activity中加入

android:configChanges="orientation|keyboard|keyboardHidden|screenSize"

在屏幕旋转或屏幕大小改变或软键盘弹出或软键盘隐藏就会调用
onConfigurationChanged();
如果没有加声明,activity在上述情况改变是会重建

内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值