Activity的四种启动模式分析

本文详细介绍了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,包括它们的特点、工作原理及应用场景。

        在介绍启动模式之前,我们先谈一个概念taskAffinity,每一个activity都存在该属性,标识了这个activity运行在哪个task中,或者理解为activity和task的依附关系。这个属性表示了activity希望进入的task,如果一个activity没有显式的指明taskAffinity,那么activity的该属性等于其所在application指明的该属性,如果其所在的application也未指明该属性,则其值就是包名。

        进入正题,activity的四种启动模式:

        standard,

        singleTop,

        singleTask,

        singleInstance.

standard模式(默认模式):

        该模式是默认的标准启动模式,在该模式下的activity,每一次启动一次都会重写创建一个新实例,而不管该实例存在与否,每次启动都会依次执行activity的相关方法:onCreate(),onStart(),onResume()。这种模式下,谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈中。

singleTop模式(栈顶复用模式):

        该模式下,如果activity已经位于栈顶,那么它不会被重写创建,同时它的onNewIntent()方法被调用,通过此方法的参数我们可以去除当前请求的信息。如果栈顶不存在activity实例,那么情况与standard模式相同。需要注意的是此时activity的onCreate(),onStart()方法不会被调用,因为它并未发生改变。

        singleTop模式下的三种情况:

        1)当前栈中已经有activity的实例并且位于栈顶时,不会重写创建实例,而是将intent对象作为参数传入,回调onNewIntent()方法。

        2)当前栈中已经有activity实例,但是未处在栈顶,也会重写创建。

        3)当前栈中没有activity实例,此时同standard模式。

注意:standard和singleTop模式都是在原来任务堆栈中创建activity实例,不会重新创建task,并且前文说到的taskAffinity也不影响。

singleTask模式(栈内复用模式):

        只要栈中存在activity实例,就不会重写创建,无论其是否处在栈顶,若未处在栈顶则移除其上的activity,并且回调onNewIntent方法。而当我们启动SingleTaskActivity ,首先会寻找需要的任务栈是否存在,也就是taskAffinity指定的值,这里就是包名,发现存在,就不再创建新的task,而是直接使用。当该task中存在该Activity实例时就会复用该实例,这就是栈内复用模式。 

       singleTask启动activity时,首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈,如果不存在,则会创建一个新的task,并创建新的activity实例入栈到新创建的task中去;如果存在,则查询该任务栈中是否有该activity实例,如果存在实例,则将其上的activity全部移除,并回调onNewIntent方法,如果不存在该activity,则创建activity实例,并入栈。

        此外,我们可以将两个不同App中的Activity设置为相同的taskAffinity,这样虽然在不同的应用中,但是Activity会被分配到同一个Task中去。

        singleInstance模式(全局唯一模式):

        该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。 

        singleInstance模式启动的Activity在系统中具有全局唯一性。


















需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值