Android Activity的四种启动模式

Android Activity的四种启动模式前言记得第一次探讨 Activity 的启动模式 是在 2017 年 8 月份 那个时候对一年后走出校门的未来很是憧憬 时间真快 已经毕业四个月 工作和生活也都趋于稳定 一 小前言相信很多人和我一样 在初学 Android 甚至初入职场的时候不了解 Acticity 的启动模式 或者为了面试刷题刷到了 但并不理解启动模式的作用 以及如何正确的使用启动模式而不是所有的都是用默认模式 二 Activi

前言

记得第一次探讨Activity的启动模式,是在2017年8月份,那个时候对一年后走出校门的未来很是憧憬,时间真快,已经毕业四个月,工作和生活也都趋于稳定。

一、小前言

  相信很多人和我一样,在初学Android甚至初入职场的时候不了解Acticity的启动模式,或者为了面试刷题刷到了,但并不理解启动模式的作用,以及如何正确的使用启动模式而不是所有的都是用默认模式。

二、Activity启动模式简介

Activity有四种启动模式,standard、singleTop、singleTask、singleInstance,默认启动模式是standard

 2.1 standard 模式

,比如我们在ActivityA中有一个按钮,点击按钮跳转到ActivityB,ActivityB中有一个按钮,点击按钮跳转到ActivityC,那么此时该栈是这样的:

Android Activity的四种启动模式

那么如果在ActivityC中有个按钮跳转到ActivityB呢?没错,是再次创建一个ActivityB实例

Android Activity的四种启动模式

那么此时,我们点击返回键,会首先移除栈顶的ActivityB,回到ActivityC,在移除栈顶的ActivityC回到ActivityB,以此类推。

Android Activity的四种启动模式

当Activity全部退出时,系统会自动回收这个空栈。

2.2 singleTop模式

改变Activity的启动模式,可以在配置文件中为Activity添加lauchMode属性

Android Activity的四种启动模式

singleTop模式为栈顶复用模式,通俗的说,就是如果栈顶的Activity和启动的Activity的是同一个,那么就直接复用,比如还是在ActivityA中跳转到ActivityB,我们将ActivityB的启动模式设置为singleTop,因为当前栈顶是ActivityA,不是ActivityB,所以会创建新的ActivityB实例放入任务栈中

Android Activity的四种启动模式

现在我们在ActivityB中点击按钮跳转ActivityB,因为当前栈顶就是ActivityB所以会直接复用,此时栈内仍是ActivityB和ActivityA,此时点击返回按钮会直接退回到ActivityA。

2.3 singleTask 模式

singleTask是栈内复用模式,在这里栈内复用要区分要启动的Activity的所需栈是否是当前栈

2.3.1 是当前栈

比如现在有ActivityA 启动模式为singleTask ,在ActivityA中启动ActivityB,ActivityB在栈中不存在实例,则创建ActivityB实例,此时栈为:

Android Activity的四种启动模式

假设现在在ActivityB中启动ActivityA,会在当前栈中是否有ActivityA,若有则将ActivityA移到栈内,将位于ActivityA之上的移出栈顶,那么现在栈为:

Android Activity的四种启动模式

此时按返回键会直接退出程序,如果当前栈为

Android Activity的四种启动模式

我们现在启动ActivityB中启动ActivityA,则会将位于ActivityA栈顶的ActivityB、ActivityC以及ActivityB移出栈顶,此时栈内只是有ActivityA。

2.3.1 不是当前栈

不是当前栈的情况比较特殊,这里简单介绍

假设当前任务栈是A,A栈中有ActivityA、ActivityB,在B中启动ActivityC,并且ActivityC所需的任务栈为B,栈B不存在所以会首先创建栈B,然后创建ActivityC实例放入栈B中

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

Android Activity的四种启动模式

默认任务栈的名字为应用包名,同样我们可以在配置文件中设置TaskAffinity属性,但必须和singleTask启动模式配对使用

2.4 singleInstance模式

singleInstance模式也是”栈内”复用模式,不过,比如现在当前栈中有ActivityA,我们在A中启动ActivityB,ActivityB的启动模式是singleInstance,此时会创建一个新的任务栈,创建ActivityB实例将ActivityB放在新的任务栈中

Android Activity的四种启动模式

2.5 Java代码设置启动模式

除了在配置文件中,我们还可以通过在Java代码中设置启动模式

intent.setFlags();

singleTask 对应 FLAG_ACTIVITY_NEW_TASK

singleTop 对应 FLAG_ACTIVITY_SINGLE_TOP

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

分享技术文章,投稿分享,不限技术种类,不限技术深度,让更多人因为分享而受益。

Android Activity的四种启动模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209585.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:54
下一篇 2026年3月19日 上午8:54


相关推荐

  • mysql脑裂_高可用 脑裂问题

    mysql脑裂_高可用 脑裂问题什么是脑裂 split brain 在 双机热备 高可用 HA 系统中 当联系两个节点的 心跳线 断开时 即两个节点断开联系时 本来为一个整体 动作协调的 HA 系统 就分裂成为两个独立的节点 即两个独立的个体 由于相互失去了联系 都以为是对方出了故障 两个节点上的 HA 软件像 裂脑人 一样 本能 地争抢 共享资源 争起 应用服务 就会发生严重后果 1 或者共享资源被瓜分 两边

    2026年3月17日
    2
  • pycharm无法下载中文_没有python解释器

    pycharm无法下载中文_没有python解释器关于pycham中解释器无法下载的问题

    2022年8月29日
    5
  • 嵌入式学习步骤[通俗易懂]

    嵌入式学习步骤[通俗易懂]作者:李Brooks链接:https://www.zhihu.com/question/22252234/answer/75026117来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。占坑先。——————————————————————-第一次修改咯。不请自来。做电赛…

    2022年5月1日
    53
  • C语言统计一个字符串中单词的个数「建议收藏」

    C语言统计一个字符串中单词的个数

    2022年2月5日
    54
  • VGGnet网络结构详解

    VGGnet网络结构详解nbsp VGG 网络结构 下面算一下每一层的像素值计算 输入 224 224 31 conv3 64 卷积核的数量 kernelsize 3stride 1pad 1 像素 224 3 2 1 1 1 224 64 参数 3 3 3 64 17282 conv3 64 kernelsize 3stride 1pad 1 像素 224

    2026年3月26日
    2
  • 程序员15k什么水平_初级码农

    程序员15k什么水平_初级码农前言大家好啊,我是秃顶的码哥!又是一年一度的高校毕业季,不少计算机专业的大学生已经踏上了求职之路,码哥我也想起了那天夕阳西下的奔跑,那是我逝去的青春啊!还记得我们那批同学毕业时,一起憧憬自己拿到15k、20K薪资的情景,但实际上,我们中绝大大部分的同学工作好几年了,还只是个拿几千工资的低级码农。现在码哥作为一枚已经秃顶的互联网行业老油条,下面就和大家分享一下如何避免成为低级码农的个人经验吧!以下几点如果你都能做到,月薪20k其实并不难哦!第一、多看计算机相关的书籍。读书一直是世界上性价比

    2022年9月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号