【android开发-05】android中activity的启动模式介绍

1,活动的启动模式
在 Android 中,Activity 的启动模式主要有以下四种:

默认启动模式(Normal):这是默认的启动模式,基本上就是标准的启动模式。当一个 Activity 启动后,它将会被压入堆栈。如果用户再次启动这个 Activity,那么之前的实例会被暂停并压入堆栈顶,然后新的实例开始运行。

栈顶启动模式(SingleTop):在这种模式下,如果新的 Activity 在堆栈顶已经存在,则不会创建新的 Activity,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。

栈内启动模式(SingleTask):在这种模式下,如果新的 Activity 不在堆栈顶,系统会创建新的 Activity 并压入堆栈;如果新的 Activity 已经在堆栈中存在,那么系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。

单例启动模式(SingleInstance):这是一种特殊的栈内启动模式。在这种模式下,Activity 只能在一个任务的实例中存在,它始终位于堆栈的顶部。即使系统任务切换,它也不会被替换。当一个 SingleInstance Activity 被启动时,系统会创建一个新的任务栈并把 Activity 压入栈顶。

以上就是 Android 中 Activity 的四种启动模式。需要注意的是,这些启动模式并不能防止 Activity 被系统杀死,它们只是在需要创建新的 Activity 或者在已经存在的 Activity 上启动新的 Intent 时,决定了系统如何处理这些 Activity。

可以在AndroidManifest.xml中通过标签指定android:luanchMode属性来选择启动模式。

2,不同模式的启动原理

以下是一个 Android 中不同启动模式运行的例子。

假设有两个 Activity,分别是 FirstActivity 和 SecondActivity。

默认启动模式(Normal):
如果 FirstActivity 启动了 SecondActivity,那么 FirstActivity 会被暂停并压入堆栈,SecondActivity 会开始运行。如果再次启动 SecondActivity,会创建一个新的 SecondActivity 实例并压入堆栈,之前的 SecondActivity 实例会被暂停。
在这里插入图片描述

栈顶启动模式(SingleTop):
如果 SecondActivity 已经在堆栈顶,那么当再次启动 SecondActivity 时,系统不会创建新的 SecondActivity 实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。如果 SecondActivity 不在堆栈顶,系统会创建一个新的 SecondActivity 实例并压入堆栈顶。
在这里插入图片描述

栈内启动模式(SingleTask):
如果 SecondActivity 不在堆栈中,系统会创建一个新的 SecondActivity 实例并压入堆栈。如果 SecondActivity 已经在堆栈中存在,那么系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。在这个模式下,即使系统任务切换,SecondActivity 也不会被替换。
在这里插入图片描述

单例启动模式(SingleInstance):
在这个模式下,SecondActivity 只能在一个任务的实例中存在,它始终位于堆栈的顶部。当 FirstActivity 启动 SecondActivity 时,系统会创建一个新的任务栈并把 SecondActivity 压入栈顶。即使系统任务切换,SecondActivity 也不会被替换。当再次启动 SecondActivity 时,系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。
在这里插入图片描述

3,activity启动模式运行代码参考例子
以下是一个简单的 Android 代码示例,演示了不同启动模式下的 Activity 运行情况:

public class MainActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 启动默认启动模式的 SecondActivity  
        startActivity(new Intent(this, SecondActivity.class));  
    }  
}  
  
public class SecondActivity extends AppCompatActivity {  
  
    private static final String TAG = "SecondActivity";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_second);  
  
        // 打印当前 Activity 的启动模式  
        Log.d(TAG, "Activity launch mode: " + getIntent().getFlags());  
  
        // 启动栈顶启动模式的 ThirdActivity  
        startActivity(new Intent(this, ThirdActivity.class));  
    }  
}  
  
public class ThirdActivity extends AppCompatActivity {  
  
    private static final String TAG = "ThirdActivity";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_third);  
  
        // 打印当前 Activity 的启动模式和堆栈信息  
        Log.d(TAG, "Activity launch mode: " + getIntent().getFlags());  
        Log.d(TAG, "Task stack: " + getTaskStack());  
    }  
}

在这个例子中,MainActivity 启动了 SecondActivity,SecondActivity 又启动了 ThirdActivity。每个 Activity 中都打印了当前 Activity 的启动模式和堆栈信息。根据打印结果,我们可以观察到不同启动模式下 Activity 的运行情况和堆栈变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/226503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C51--IIC协议

IIC协议初识: 1、概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。 IIC属于半双工同步通信方式 SCL——时钟信号 SDA——数据信号 2、特点: 简单性和…

堆栈,BSS,DATA,TEXT

一、目标文件 首先目标文件的构成,Linux下就是.o 文件 编译器编译源码后生成的文件叫目标文件(Object File)。 目标文件和可执行文件一般采用同一种格式,这种存储格式为 ELF。 目前文件的内容至少有编译后的机器指令代码和数据&a…

leetcode 622. 设计循环链表

这道题讲了两种方法,第一个代码是用数组实现的,第二个是用链表实现的,希望对你们有帮助 (最好在VS自己测试一遍,再放到 leetcode上哦) 下面的是主函数(作参考),静下心来…

第二十一章——网络通信

一.网络程序设计基础 1.局域网与互联网 2.网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。 1.1 TCP/IP层次结构 2.TCP与UDP协议 TCP可保证数据从一端送至另一端时,能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相…

AWR1642 boost开发板支持的TI参考设计

打开radar_toolbox_1_30_00_05\source\ti\examples\examples_overview,通过输入“1642”查找AWR1642 BOOST支持的参考设计,通过筛选,支持AWR1642 BOOST的参考设计如下: 挑选出两个参考设计上手,一个是“nonos_oob_16xx",不带OS;另一个是”short range radar“,比较…

吹响AI技术应用的号角

毫无疑问,各企业正围绕各种技术展开一场持续不断的角逐,力争率先取得领先且具创新性的技术进步,AI技术也不例外。疫情期间,全球各地企业的员工纷纷转向居家办公。因此,为轻松实现这一转型并建立起远程办公的新常态&…

用23种设计模式打造一个cocos creator的游戏框架----(四)装饰器模式

1、模式标准 模式名称:装饰器模式 模式分类:结构型 模式意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式比生成子类更为灵活。 结构图: 适用于: 当需要给一个对象在运行时添加更…

使用命令行创建vue3项目等待时间长解决方案

问题描述 今天在使用命令行创建vue3项目的时候,发现命令行窗口卡了很久,明明已经更换了安装包的源,并且检查环境变量配置正确的情况下,为什么还要等待那么久呢? 解决方案 使用命令再次检查更换淘宝的源是否配置成功…

混沌映射初始化种群与随机初始化种群初始种群分布图对比

自行切换混沌映射,代码如下: Lb -1; % 搜索空间下界 Ub 1; % 搜索空间上界N_iter 500; % 最大迭代次数 N 30; % 种群个数 dim 2; % 种群维度 Z zeros(N, dim);% 随机生成一个d维向量 Z(1, :) rand(1, dim);% 利用logistic生成N个向量 for i…

C++新经典模板与泛型编程:用成员函数重载实现std::is_convertible

用成员函数重载实现is_convertible C标准库中提供的可变参类模板std::is_convertible,这个类模板的主要能力是判断能否从某个类型隐式地转换到另一个类型,返回的是一个布尔值true或false。例如,一般的从int转换成float或从float转换成int&am…

锁表的原因及解决办法

引言 作为开发人员,我们经常会和数据库打交道。 当我们对数据库进行修改操作的时候,例如添加字段,更新记录等,没有正确评估该表在这一时刻的使用频率,直接进行修改,致使修改操作长时间无法响应&#xff0…

孩子都能学会的FPGA:第二十四课——用FPGA和格雷码实现异步FIFO

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门,作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿…

数据结构 图的广度优先搜索和深度优先搜索

一、广度优先搜索 广度优先搜索等价于树的层次遍历,将起点的每一层进行遍历 当这一层结点全部被遍历完时,再遍历下一层次,从图中可以根据距离遍历起点的长度进行层次选择 例: 以a结点作为开始结点 a的下一层次有b c e三个结点 所以…

GIT GUI使用

文章目录 一、新建本地仓库二、推送(push) 一、新建本地仓库 在空白处右键,找到GIT GUI here, 如果没有仓库,出现的是这样的: 如果有仓库,在本地仓库里打开就是这样的: 新建本地…

Http协议与Tomcat

HTTP协议 HTTP协议(HyperText Transfer Protocol)即超文本传输协议 ,是TCP/IC网络体系结构应用层的一个客户端-服务端协议,是所有客户端,服务端数据传输的基石(数据传输规则) 特点 ⭐基于TCP协…

C++刷题 -- 链表

C刷题 – 链表 文章目录 C刷题 -- 链表1.删除链表的倒数第 N 个结点2.链表相交3.环形链表 1.删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 快慢指针的应用 fast指针先移动N步,slow依然指向head;然后fa…

算法-01-递归

1-理解递归 斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……特点是 从第三个数开始,第…

C语言指针详解上

1 野指针 int main01(){//野指针就是没有初始化的指针,指针的指向是随机的,不可以 操作野指针//int a 0;//指针p保存的地址一定是定义过的(向系统申请过的)int *p;//野指针*p 200;printf("%d\n",*p);system("pause");return 0;}2 空指针 空指针的作用…

【Spring 源码】 贯穿 Bean 生命周期的核心类之 AbstractAutowireCapableBeanFactory

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

C++【智能指针】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻为什么需要智能指针&#x…