android的四种加载模式,android开发笔记之 Activity四种加载模式

既然是安卓开发,我们就免不了和Activity打交道,因为它是前台的界面,也是android四大组件之一,那我们就来谈谈Activity的四种加载模式。

为什么要为Activity指定加载模式?

Android对Activity的管理,采用Task(即栈)来管理多个Activity,当我们启动一个应用时,Android就会为之创建了一个Task,然后启动这个应用的入口Activity。

Android的Task是一个有点麻烦的概念,因为Android并没有为Task提供API,因此开发者无法真正访问Task,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。

事实上,我们可以把Task理解成Activity栈,Task以栈的样式来管理Activity,先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。

那么Activity的加载模式,就负责管理实例化,加载Activity的方式,并可以控制Activity与Task之间的加载关系。

先看看哪四种模式:

①standard —>默认(标准)

不管Activity实例是否存在,都会创建一个新的实例装入Task。

(每次通过这种模式来启动目标Activity时,android总会为目标Activity创建一个新的实例,并将该Activity添加到目前的Task栈中。

这种模式不会启动新的Task,新的Activity将被添加到原有的Task中)

例子:10个应用程序都要调用浏览器的应用,

那么你需要创建10个浏览器对象的Activity的对象吗?

②singleTop —>栈顶单例(栈顶不会出现相邻的相同activity实例)

被跳转的Activity位于Task顶部时:

不会创建新的实例,直接复用已有的Activity实例

被跳转的Activity不是位于顶部时:

创建一个新的实例,同standard模式相似

③singleTask —>栈内单例(在同一个Task内只有一个实例)

采用这种模式分三种情况:

a)如果将要启动的目标Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶。

b)如果将要启动的目标Activity已经位于Task栈顶,此时同singleTop模式

c)如果将要启动的目标Activity没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶。

④singleInstance —->全局单例(会单独拥有一个栈)

采用这种模式启动目标Activity时,可分为如下两种情况:

a)如果将要启动的目标Activity不存在,系统会先创建一个全新的Task,在创建目标Activity的实例,并将它加入新的Task的栈顶。

b)如果将要启动的目标Activity已经存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统会把该Activity所在的Task转到前台,从而使用该Activity显示出来。

需要指出:采用单例模式加载Activity总是位于Task栈顶,

采用单例模式加载Activity所在Task只包含该Activity

那如何设置呢??

这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。

af029804d28d45fa45b1984911879845.png

相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。

Intent intent = new Intent(ReorderFour.this, ReorderTwo.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent);

核心的Intent Flag有:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

FLAG_ACTIVITY_SINGLE_TOP

大家看这张图应该能够明白栈的含义(画的有点丑):

927ce0cbfc86323e6947616367861505.png

我在这里就简单做点示例:

public class AActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_a);

}

public void goAActivity(View view) {

Intent intent = new Intent(AActivity.this,BActivity.class);

}

}

activity_a.xml

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.briup.lauchmodetest.AActivity">

android:onClick="goAActivity"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="跳转到AActivity"/>

public class BActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_b);

}

public void goBActivity(View view) {

Intent intent = new Intent(BActivity.this,AActivity.class);

}

}

activity_b.xml

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.briup.lauchmodetest.AActivity">

android:onClick="goBActivity"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="跳转到BActivity"/>

①现在我们假设 A 跳到 B ,然后 B 跳到 B,再 B 跳到 A,都采用默认的加载模式,栈的情况是怎么样的呢

8c7e5f0c4a16f127a921843f297de0a7.png

②现在我们假设 A 跳到 B ,然后 B 跳到 B,再 B 跳到 A,B采用栈顶单例加载模式,栈的情况是怎么样的呢

1d3b07f1573a8eb9ef6a9d637dda245c.png

③现在我们假设 A 跳到 B ,然后 B 跳到 B,再 B 跳到 A,B采用栈内单例加载模式,栈的情况是怎么样的呢

7ce1dd49488776701d0ec91a63c51c30.png

④现在我们假设 A 跳到 B ,然后 B 跳到 B,再 B 跳到 A,B采用全局单例加载模式,栈的情况是怎么样的呢

fb65e7ffbd63957c6c82c3be3cf85c37.png

大家有没有理解呢,去试试吧,有什么不懂可以在下方提问或者和我一起探讨。

ESP32-CAM搭建Arduino及简单使用 配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹 阅读详情

相关推荐

STM32 RT-Thread 系统分析(1)- 启动文件

RT-Thread STM32 系统分析(1)- 启动文件前言基本信息前言说明三级目录 前言 基本信息 名称 描述说明 RT-Thread Studio 软件版本 版本: 1.1.3 RT-Thread 系统版本 4.0.2 STM32CubeIDE 软件版本 1.4.0 STM32芯片型号 STM32F013VG 前言说明 使用了STM32CubeIDE 和 RT-Thread Studio 建立了相同型号芯片的工程,对比其中启动文件内容差异如下: 左侧是RT-Threa

鸳鸯冰笔的博客 4096

区分Activity的四种加载模式

转载:http://marshal.easymorse.com/archives/2950 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 A...

owen422的专栏 638

YOLOv12中的A2C2f模块详解,涉及区域注意力模块(A2)和 R-ELAN 结构详解

区域注意力模块(Area Attention, A2)的设计出发点是为了解决传统注意力机制在计算复杂度和内存访问效率上的问题。传统的自注意力机制(Self-Attention)具有二次方的计算复杂度(O(n²)),尤其是在处理高分辨率图像时,计算成本非常高。此外,注意力机制的内存访问模式不如卷积神经网络高效,导致在实际应用中难以满足实时性要求。区域注意力模块通过将特征图划分为多个区域,并在每个区域内进行注意力计算,从而显著降低了计算复杂度。

Limiiiing的博客 5513

Android的四种加载模式

Android的四种加载模式:   首先在配置Activity时即可指定该Activity用哪种加载模式,通过android:launchMode属性。   四种加载模式: standard:标准模式,默认 singleTop:Task顶单例模式 singleTask:Task内单例模式 singleInstance:全局单例模式   A

struggling的专栏 660

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 466

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

Android中Activity的四种加载(启动)模式

文章目的:详解Activity的四种加载(启动)模式 前言:活动的启动模式在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有四种,分别是 standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml 中通过给标签指定android:launchMode属性来选择启动模式。 开发环境

FynnJason的技术屋 890

SolidWorks速成教程P3-6【零件 | 第六节】——草图封闭轮廓&所选轮廓&厚度为零的报错

到这里,我们已经将特征成型的常用功能学完。这节我来继续讲解一下 SolidWorks中建模的一些容易忽略的问题(草图封闭轮廓&所选轮廓&厚度为零的报错)。

嵌入式阿齐Archie 5780

android 加载模式,android开发笔记之 Activity四种加载模式

既然是安卓开发,我们就免不了和Activity打交道,因为它是前台的界面,也是android四大组件之一,那我们就来谈谈Activity的四种加载模式。为什么要为Activity指定加载模式?Android对Activity的管理,采用Task(即栈)来管理多个Activity,当我们启动一个应用时,Android就会为之创建了一个Task,然后启动这个应用的入口Activity。Android的...

weixin_39926749的博客 256

触摸芯片RM1015B基本使用方法

RM1015B触摸芯片使用指南:该芯片采用4通道设计(实际使用3通道),通过I2C接口通信(设备地址0x2B)。硬件设计需注意中断/复位引脚复用,需上拉处理。软件配置包括初始化、中断处理和定时器扫描,通过设置各通道阈值(0-300W)调节灵敏度,值越小越灵敏。调试时可调用rm1015B_debug_func()输出波形数据。典型应用场景包括接近检测和手势识别,中断触发后需在8ms内响应。特别注意不同通道的寄存器映射关系及校准流程,确保检测准确性。

云淡风轻 176

FineReport 动态列切换统计维度

目标: 自己选择统计维度进行数据的汇总统计数据集参数实现动态列。

Davina_yu的博客 1053

Android的四种启动模式

Android的四种启动模式

weixin_44715716的博客 9017

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 905

android开发笔记之 Activity四种加载模式

既然是安卓开发,我们就免不了和Activity打交道,因为它是前台的界面,也是android四大组件之一,那我们就来谈谈Activity的四种加载模式。为什么要为Activity指定加载模式?Android对Activity的管理,采用Task(即栈)来管理多个Activity,当我们启动一个应用时,Android就会为之创建了一个Task,然后启动这个应用的入口Activity。Android的T

minigeek的博客 3931

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android中activity的四种加载模式

一、何为加载模式在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。二、加载模式有哪些以及如何配置1、在android里面,activity有四种加载模式:standard, singleTop, singleTask, singleInstance 。详细介绍在后面。2、配置方法直接修改A

pcwings的专栏 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android四种Activity的加载模式

Android四种Activity的加载模式

jfdtygv的博客 1375

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

详解Activity的四种加载模式

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 该文转自:http://marshal.easymorse.com/archives/2950 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可...

孤云博客 2864

Android中Activity四种加载模式

Activity四种加载模式         我们知道在配置Activity的时候可以指定android:lauchMode属性,该属性用于配置该Activity的加载模式,概述行支持以下四种:        1.standard: 标准模式,这是默认的加载模式.        2.singleTop: Task顶单例模式.                3.single

凹凸曼哒小乖兽 2028

Android中Activity的四种加载模式

下文整理自: http://blog.youkuaiyun.com/pcwings/article/details/5895197 ---------------------------------------- 一、何为加载模式 在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个acti

WOSHICAIXIANFENG的专栏 865

安卓之Activity的四种加载模式

Activity的四种加载模式 >standard 标准模式 默认加载模式 >singleTop Task顶单例模式 >singleTask Task内单例模式 >singleInstance 全局单例模式 Android采用Task来管理多个Activity,当我们启动一个应用时,Android会为之创建一个Task,然后启动这个Task的入口Activity。Android的Task

保持你本色 494

activity的四种加载模式和它们的区别

activity的四种加载模式 在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。 在android里,有4种activity的启动模式,分别为:  sta

学习笔记 1734

Android Activity四种加载模式

1 Activity的四种加载模式 配置Activity时指定 android:launchMode 属性配置加载模式。 支持的属性值: standard(标准模式,默认的加载模式): 不会启动创建新的任务栈,新的Activity会被添加到启动该Activity所在的原有的Task中。 singleTask(Task内单例模式): 创建的Activity所需要的Task不存在:创建该A...

Vincent的博客 376

android的四种加载模式,Android中Activity的四种加载模式

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?之前看Android深入理解Activity和Fragment这一章的时候,看到过Activity的四种加载模式,当时一方面觉得有点晦涩难懂,一方面觉得可能在以后的开发过程中用不到,所以就没有怎么细看。今天在看师兄做的项目代码时,发现在配置文件中都会指定加载模式android:launchMode属性。问了一下师兄,才知...

weixin_39676633的博客 284

Activity的四种加载模式

在多Activity开发中,有可能是自己应用之间的Activity跳转,也有可能夹带其他应用的可复用的Activity,可能会希望跳转到原来某个Activity实例,而不产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 Activity有四种加载模式,分别为: 1、standard:标准模式(默认模式),一调用startActivity()...

weixin_30662011的博客 195

android - 详解Activity的四种加载模式

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 Activity有四种加载模式: standard singleTop singleT...

weixin_34315665的博客 210
上一篇: html视频资源加载出错处理,如何强制Html5视频进行全量加载
下一篇: html圆圈怎么设置,HTML画布,如何在点击鼠标的位置时创建一个圆,然后在圆上增加半径?...
weixin_39937312
博客等级 码龄9年 65粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值