首页 > 编程知识 正文

activity到底什么用,activity启动模式使用场景

时间:2023-05-06 13:07:07 阅读:157193 作者:656

前言

我记得第一次讨论Activity的开始模式是在2017年8月。 那时,我憧憬着一年后走出校门的未来。 时间还早,毕业4个月了,工作和生活也很稳定。

一.前言

? 很多人和我一样,相信我第一次进入职场的时候不知道Acticity的启动模式,也不知道为了面试而磨练问题,但我不知道启动模式的作用,也不知道如何正确使用启动模式。

二.活动启动模式介绍

活动有四种启动模式:标准、单任务、单实例,缺省启动模式为标准

? 2.1? 标准模式

当程序启动时,缺省情况下将创建任务堆栈。 Activity被放在任务堆栈中。 例如,如果创建一个新项目并缺省生成ActivityA,则任务堆栈可能如下所示:

例如,如果ActivityA具有按钮,单击按钮跳转到ActivityB,而ActivityB具有按钮,单击按钮跳转到ActivityC,则堆栈现在将如下所示:

那么,如果ActivityC有按钮呢? 是的,要再次创建ActivityB实例

在这种情况下,单击“上一步”按钮将首先删除堆栈顶部的ActivityB,返回到ActivityC,然后删除堆栈顶部的ActivityC并返回到ActivityB。

Activity全部结束后,系统会自动回收空堆栈。

2.2简单模式

通过更改Activity启动模式,可以将activity lauch mode属性添加到配置文件中

singleTop模式是堆栈顶部的复用模式。 简单地说,如果堆栈顶部的Activity和启动的Activity相同,则直接复用。 例如,还是用ActivityA跳到ActivityB。 将ActivityB的启动模式设置为singleTop。 因为现在的堆栈顶部是ActivityB

现在,在ActivityB上单击按钮以跳转到ActivityB。 当前堆栈的顶部是ActivityB,因此可以直接重用。 此时,堆栈中仍为ActivityB和ActivityA。 此时,单击“上一步”按钮将返回ActivityA。

2.3单任务模式

singleTask是堆栈内复用模式,在此,堆栈内复用区分启动的Activity的所需堆栈是否为当前堆栈

2.3.1是当前堆栈

例如,如果ActivityA当前的启动模式为singleTask,则在ActivityA中启动ActivityB,并且ActivityB在堆栈中不存在实例,则创建一个ActivityB实例。 此时,堆栈如下所示。

现在,在ActivityB中启动ActivityA时,当前堆栈中是否有ActivityA。 如果将ActivityA移动到堆栈中,并位于ActivityA上方的移动堆栈的顶部,则该堆栈将如下所示:

此时按后退键,当前堆栈将显示为

现在,在ActivityB中启动ActivityA时,位于ActivityA堆栈顶部的ActivityB、ActivityC和ActivityB将移动到堆栈顶部。 堆栈内只是有ActivityA。

2.3.1不是当前堆栈

不是现在的堆栈的情况很特殊,这里简单介绍一下

假设当前任务堆栈为a,a堆栈中有ActivityA、ActivityB,用b启动ActivityC,ActivityC所需的任务堆栈为b。 因为堆栈b不存在,所以首先创建堆栈b,然后创建ActivityC实例并将其放入堆栈b中

TaskAffinity可以理解为任务的亲属性或关联性,默认情况下,APP应用内的所有Activity具有相同的亲和关系

缺省任务堆栈的名称是APP应用程序包名称,也可以在配置文件中设置TaskAffinity属性,但必须与singleTask启动模式成对使用

2.4? 单实例模式

单实例模式也是“在堆栈中”复用模式,例如,当前堆栈中有ActivityA,用a启动ActivityB。 ActivityB的启动模式为singleInstance,此时将创建一个新的任务堆栈,ActivityB实例将创建Activity

2.5 Java代码设置启动模式

除了性能分析外,还可以在Java代码中设置启动模式

intent.setFlags (;

singleTask对应于FLAG_ACTIVITY_NEW_TASK

singleTop对应于FLAG_ACTIVITY_SINGLE_TOP

欢迎关注技术公众号,微信号搜索ColorfulCode码男

共享技术文章、共享帖子、技术类型、技术深度,让更多的人通过共享获益。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。