任务栈

2023-05-16

3.1 什么是任务栈

任务栈是一种以栈的形式放置Activity实例的容器,遵循先进后出原则,包含压栈和出栈两个基本操作。

3.2 任务栈出现的原因

最直接的体现就是提升用户体验,如果没有任务栈,就比如你浏览网页,多次点击之后,你就会发现你手机hold不住了,因为它会创建出n个新闻详细页的Activity实例,不断的去创建新的Activity必定会消耗一定的内存,久而久之,应用程序会越来越卡甚至崩溃,有了任务栈之后就可以自定义activity,只创建一个activity实例进行显示新闻页面,退出也只需要退出这一个activity就行了,不然将一个个退出新创建的activity,这对用户来说肯定体验不好。任务栈可以根据不同的启动模式对activity进行管理。

3.2 任务栈的启动模式

系统提供了两种方式来设置一个Activity的启动模式,可以在AndroidManifest文件中静态设置,还可以通过Intent的Flag来设置一个Activity的启动模式。

3.2.1 静态设置

standard:默认模式。当不指定activity的启动模式时候,就会默认是standard模式,这个模式独特特点是每启动一个activity都会创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

singleTop:栈顶复用模式。如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。

singleTask:栈内复用模式。 activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity。

singleInstance:单一实例模式。整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。

3.2.1 动态设置

此处仅列举一些常用的Flag:

FLAG_ACTIVITY_NEW_TASK
使用singleInstance模式启动一个Activity,与指定android:launchMode=“singleInstance”效果相同。

ps:
1.FLAG_ACTIVITY_NEW_TASK标签必须配合taskAffinity属性使用,如果不设置taskAffinity属性值,将不会生成新task。
2.当从启动模式为singleInstance的Acitivity中启动新的Acitivity时,新的Activity自带FLAG_ACTIVITY_NEW_TASK标签。

FLAG_ACTIVITY_SINGLE_TOP
使用singletop模式启动一个Activity,与指定android:launchMode=“singleTop”效果相同。

FLAG_ACTIVITY_CLEAR_TOP
清除包含此Activity的Task中位于该Activity实例之上的其他Activity实例。这种行为的 launchMode 属性没有对应的值,只能通过代码设置。
例:任务栈为ABCD,启动 B ,会销毁B和B以上的实例 变成 A ,B 重新执行onCreate -> onStart,最终任务栈为AB

FLAG_ACTIVITY_NO_HISTORY
Activity使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就消失了,不会保留在Activity栈中。
例:任务栈AB,B设置此Flag,启动C,任务栈则变成AC,无论B是否主动finsh,任务栈都将不会保留B的task信息

3.3 小结

这里简单说一下任务栈,对任务栈有个简单认识,后面讲activity的启动会提到任务栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

任务栈 的相关文章

随机推荐

  • 【Linux驱动开发】并发控制机制:原子操作、自旋锁、信号量、互斥锁详解

    并发控制机制 首先我们来了解一下 操作系统的并发性 这个概念 xff1a 操作系统的并发性 concurrence xff1a 指的是两个或者两个以上事件在同一时间间隔内发生 xff0c 即这个设备一会执行这个事件一会执行那个事件 xff0
  • STM32F051K8U6按键中断实例

    引言 最近要开始做毕设了 xff0c 准备用STM32做一个平衡小车 xff0c 好久没做过STM32的裸机项目了 xff0c 做几个项目练练手 xff0c 复习一下 本例程使用STM32CubeMX配套hal库来实现按键中断和串口中断 芯
  • STM32库函数笔记分享

    之前刚开始自学的部分STM32笔记放出 xff0c 希望对新入门STM32和想要复习库函数的小伙伴们起到帮助 建立工程 1 寄存器操作方式 需要不断地查手册来了解每一位是干什么用的 优点 xff1a 代码简介 xff1b 缺点 xff1a
  • rc.exe not found.(完美解决,亲测有效)

    完美解决rc exe not found 报错出错原因解决方法完美解决 报错 这两天安装了vs2015和IVF2016 xff0c 安装完之后在运行程序的时候一直会出现rc exe not found xff0c 重新生成解决方案后还是一样
  • 单片机与上位机通过串口通信--笔记

    定义 先说什么是串口 xff1f xff08 1 xff09 他是一种通信接口 xff0c 单片机 IO 口上的复用功能 xff0c 上位机 xff08 电脑 xff09 和下位机 xff08 开发板 xff09 之间的数据传输 xff08
  • Qt 的Cmake方式如何创建资源文件

    传统的qmake创建的工程有pro qrc xff0c 但是如果使用cmake方式创建的工程就没有这两个东西 xff0c 我们公司就是在linux下使用cmake创建的Qt工程 xff0c 没有pro也看不到qrc xff0c 想在ui界面
  • 理解ROS Topic 通信频率背后的机制

    Topic是ROS的三种通信方式中最为基本 也是常用的一种 本文对于ROS的Topic通信背后的数据吞吐机制做一个较为详细 深入的介绍 Publisher ROS中发布一个topic的函数是这样的 ros span class token
  • Linux应用层例程4 串口应用编程

    本小节我们来学习 Linux 下串口应用编程 xff0c 串口 xff08 UART xff09 是一种非常常见的外设 xff0c 串口在嵌入式开发领域当中一般作为一种调试手段 xff0c 通过串口输出调试打印信息 xff0c 或者通过串口
  • Linux应用层例程7 CAN 应用编程基础

    CAN 是一种多主方式的串行通讯总线 xff0c 基本设计规范要求有高的位速率 xff0c 高抗电磁干扰性 xff0c 而且能够检测出产生的任何错误 经过几十年的发展 xff0c 现在 xff0c CAN 的高性能 高可靠性以及高实时性已被
  • 使用Socket方式调用HttpWebApi获取数据

    背景 xff1a 最近有一个需求 xff0c 单片机需要调用服务端Api获取数据 xff0c 因为一些原因单片机只能使用TCP方式 xff1b 作为服务端开发人员提供Demo 代码如下 xff08 这里用C 语言演示 xff09 using
  • git branch 和 tag的区别

    1 git branch 和 tag的区别 xff1f 1 git branch 上的修改可以保留 xff0c 例如在某个branch上commit一个新的节点 checkout到其它branch后commit的节点不会丢 2 git ta
  • 测线仪正确使用方法图解1

    测线仪正确使用方法图解1 测线仪正确使用方法图解2 测线仪正确使用方法图解3 测线仪正确使用方法图解 xff0c 我们来使用莱视威测试仪YN891 xff0c 先说说第一个功能 xff0c 测线 xff0c 首先 xff0c 我们打开旁边的
  • Git仓库分支(Branch)和标签(Tag)

    仓库的分支 Branch 规范 xff0c 影响到每个团队的工作流的一致性 xff1b 标签 Tag 便于开发团队 测 试团队和其他团队识别每个项目的版本 xff0c 特别是在协同处理线上问题的时候 xff0c 大家可以非常清楚 地知道线上
  • printf如何按二进制格式打印

    printf函数 xff1a int printf const char format format 这是字符串 xff0c 包含了要被写入到标准输出 stdout 的文本 它可以包含嵌入的 format 标签 xff0c format 标
  • QAV250四轴穿越机安装全程详解(多图)

    QAV250四轴穿越机安装全程详解 最近团队准备使用轻型穿越机QAV250做实验 xff0c 本文记录了QAV250的安装过程 xff0c 整理了开箱后较合理的安装顺序 xff0c 以及各个步骤的注意事项 xff0c 希望对有需要的朋友有所
  • 【C语言】进度条实现

    模拟电脑程序安装的进度条 提供两种方式 代码如下 xff1a include lt stdio h gt include lt string h gt include lt windows h gt void proc int i 61 0
  • ROS 使用记录(3) 自定义消息格式

    文章目录 0 前言1 创建 96 msg 96 文件2 构建 pkg 解析 96 msg 96 文件3 在其他 pkg 中使用自定义消息 0 前言 ROS 中可通过 publisher subscriber 和 topic 实现设计模式中的
  • TCPIP调试助手及源代码

    TCP IP xff08 Transmission Control Protocol Internet Protocol xff0c 传输控制协议 网际协议 xff09 是指能够在多个不同网络间实现信息传输的协议簇 TCP IP协议不仅仅指
  • springsecurity密码验证原理概括

    springsecurity密码验证原理概括 前言1 UsernamePasswordAuthenticationFilter2 ProviderManager3 AbstractUserDetailsAuthenticationProvi
  • 任务栈

    3 1 什么是任务栈 任务栈是一种以栈的形式放置Activity实例的容器 xff0c 遵循先进后出原则 xff0c 包含压栈和出栈两个基本操作 3 2 任务栈出现的原因 最直接的体现就是提升用户体验 xff0c 如果没有任务栈 xff0c