【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 的运行情况和堆栈变化。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 语言:认识 Rust

本心、输入输出、结果 文章目录 Rust 语言:认识 Rust前言Rust的特点Rust LOGO Rust 在IT行业的应用前景Rust 是一门系统级编程语言相关链接花有重开日,人无再少年实践是检验真理的唯一标准 Rust 语言:认识 Rust 编辑:简简单单 Onl…

每日3道PWN(第一天)

环境准备 我现在用的是kali 现阶段工具:checkesc、IDA、比较完善的python环境 下载工具的话,我这里不提供了 buuctf——test_your_nc1 参考wp: BUUCTF PWN-----第1题:test_your_nc_buuctf test_your_nc-CSDN博客 查看的资料:…

关于使用百度开发者平台处理语音朗读问题排查

错误信息:"convert_offline": false, "err_detail": "16: Open api characters limit reach 需要领取完 识别和合成都要有

Win7 旗舰版打开Rustdesk软件提示无法启动程序 ,计算机中丢失api-ms-win-shcore-scaling-|1-1-1.dll

环境: Win7 旗舰版 64位 Rustdesk1.19自编译客户端 问题描述: Win7 旗舰版打开Rustdesk软件提示无法启动程序 ,计算机中丢失api-ms-win-shcore-scaling-|1-1-1.dll "api-ms-win-shcore-scaling-|1-1-1.dll" 是一个系统动态链接库文件,它是Windows操作系统的一…

如何使用OpenCV转换图像并创建视频,实现Ken Burns特效

一、Ken Burns特效 当使用OpenCV时,最常使用的是图像,但是我们也可以多个图像创建动画,通过引入时间轴更容易可视化。 Ken Burns特效这是一种以电影制片人肯伯恩斯 (Ken Burns) 命名的平移和缩放技术,Ken Burns 效果不是在屏幕上显示大型静态照片,而是裁剪细节,然后平移图…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图: 温度传感器原理图: 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图: 模拟量转相应温度公式: CubMx配置: Keil配置&…

com.mongodb.MongoSocketOpenException: Exception opening socket

估计mongodb数据库没开启,或者链接错误了,谁又改了,唉 2023-11-29 16:19:45.818 INFO 39552 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017…

Python实现交易策略评价指标-夏普比率

1.夏普比率的定义 在投资的过程中,仅关注策略的收益率是不够的,同时还需要关注承受的风险,也就是收益风险比。 夏普比率正是这样一个指标,它表示承担单位的风险会产生多少超额收益。用数学公式描述就是: S h a r p R…

CUDA简介——Grid和Block内Thread索引

1. 引言 前序博客: CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化 Thread Index: 每个Thread都有其thread index。 在Kernel中,可通过内置的threadIdx变量来获取其thread index。threadIdx为三维的,有相…

PMP备考必看|浅谈PMP证书的价值,PMP考试详细全流程

作为已经在项目管理领域摸爬滚打五年的资深项目经理,我可以诚实的告诉大家,在项目管理领域拥有丰富项目管理经验的人都知道,很多公司在发布招聘信息时都会要求申请者持有PMP证书,这些证书在项目经理岗位的要求中经常出现。 在实际…

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求? POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…

会声会影2024无需激活码一键下载安装包

Corel Video Studio会声会影2024中文直装旗舰版是一款很流行的视频编辑处理软件,由于其简单易用,且功能不错,在国内拥有众多使用者,小编之前给大家分享过Corel Video Studio Ultimate会声会影2024旗舰版中文版,今天再为…