Activity四大启动模式详解

深入剖析 Android 的四大启动模式:如何有效管理 Activity 栈 在 Android 开发中,启动一个新的 Activity 时,通常会用到 Intent,而 Intent 的启动模式决定了新启动的 Activity 将如何与现有的 Activity 交互。SingleInstance 模式和 SingleTask 类似,但有一个重要的区别:在 SingleInstance 模式下,目标 Activity 会被放置在一个独立的任务栈中,并且该栈中只能有该 Activity 的一个实例。无论何时启动该 Activity,都会在新的任务栈中创建它,而栈中只能有这一个实例。 阅读详情

刚开始学的时候
咦,我刚退了这个页面,怎么又退出来了
咦,怎么又崩溃了
咦,gradle怎么配置呀,又报红了!?
想弄清楚,那就看下面的讲解吧,详细这是初学者经常遇见的问题。
之前的大神有讲解的相当详细的推荐过来:
Android中Activity四种启动模式和taskAffinity属性详解

启动模式一共有四种(初学者面试常问):
可以在AndroidManifest.xml中通过给标签指定android:launchMode属性来选择启动模式。
Android启动提供了四种启动方式:

  • 标准模式(Standard)
  • 栈顶复用模式(SingleTop)
  • 栈内复用模式(SingleTask)
  • 单例模式(SingleInstance)

知识储备:


特点:后进先出


在这里插入图片描述
Activity的管理方式 = 任务栈
任务栈 采用的结构 = “后进先出” 的栈结构
每按一次Back键,就有一个Activity出栈

一、standard

standard是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

二、singleTop

当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。
不管你点击多少次按钮都不会再有新的打印信息出现,因为目前firstActivity已经处于返回栈的栈顶,每当想要再启动一个firstActivity时都会直接使用栈顶的活动,因此firstActivity也只会有一个实例,仅按一次Back键就可以退出程序。
注意:当firstActivity并未处于栈顶位置时,这时再启动firstActivity,还是会创建新的实例的。

三、singleTask

每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

四、singleInstance

这个模式是四种启动模式中最特殊也最复杂的一个了。
假设我们的程序中有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实例,如何实现?
使用前三种启动模式肯定是做不到的,因为每个引用程序都有自己的返回栈,同一个活动在不同的返回栈中入栈时必须是创建了新的实例,而使用singleInstance模式就可以解决。
在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,解决共享活动的实例的问题。

通俗总结

在这里插入图片描述

启动模式的设置

1.在AndroidMainifest的Activity配置进行设置

<activity

android:launchMode="启动模式"
//属性
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
//如不设置,Activity的启动模式默认为**标准模式(standard)**
</activity>

2.在代码中通过Intent设置标志位

Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
标记位属性含义
FLAG_ACTIVITY_SINGLE_TOP指定启动模式为栈顶复用模式(SingleTop)
FLAG_ACTIVITY_NEW_TASK指定启动模式为栈内复用模式(SingleTask)
导FLAG_ACTIVITY_CLEAR_TOP所有位于其上层的Activity都要移除,SingleTask模式默认具有此标记效果
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上

二者区别:

优先级不同
Intent设置方式的优先级 > Manifest设置方式,即 以前者为准
限定范围不同
Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP;Intent设置方式 无法设置单例模式(SingleInstance)

活动的最佳实践

一、知晓当前是在哪个活动。
二、随时随地退出程序
可以再销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证程序完全退出,杀掉进程的代码如下所示:

android.os.Process.killProcess(android.os.Process.myPid());

其中,killProcess()方法用于杀掉一个进程,它接收一个进程id参数,我们可以通过myPid()方法来获得当前程序的进程id。需要注意的是,killProcess()方法只能用于杀掉当前的程序的进程,不能杀掉其他进程。

三、启动活动的最佳写法
启动活动的方法相信你已经非常熟悉了,首先通过Intent构建出当前的意图,然后调用startActivity()或startActivityForResult()方法将活动启动起来,如果有数据需要从一个活动传递到另一个活动,也可以借助intent来完成。

activity 一个简单实例 有关工作流的一个简单实例 立即下载

相关推荐

实现自己的AI视频监控系统-第一章-视频拉流与解码4(重点)

使用本章节代码请引用此优快云链接,尊重知识、尊重他人劳动。这一小节将正式进入代码实现部分。我们会结合实际业务需要和拉流解码流程实现一个灵活、轻便、易用的视频拉流解码模块,支持多路视频拉流解码且可以动态更新更新内部参数。在开始设计之初,我们首先考虑的是使用大家所熟知的 **OpenCV(cv2.VideoCapture)**来实现拉流和解码功能。它的 API 简单直接,几行代码就能实现从网络流中读取帧,对于快速原型验证来说非常方便。然而,在经过深入的调研和测试后,我们发现 OpenCV 在处理多路视频流、追

soulproficiency的博客 2268

android基础4——Mainifest

众所周知,应用程序中的每一个UI都是通过Activity类的一个或者多个拓展实现的。在桌面开发环境中,Activity相当于Form,来布局和显示信息,以及影响用户的动作。Mainifest可以定义应用程序及其组件和需求的结构和元数据。即它包含了组成应用程序的每一个Activity、Service、Content Provider等等的节点。 Mainifest文件由一个根标签构成,该标签带...

iteye_8029的博客 248

Augustus手动安装教程

本文记载了如何结合conda手动安装Augustus

m0_65437087的博客 1257

[Android] AndroidManifest.xml 详解

【2】service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。应用程序运行的进程名,它的默认值为元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。

ykun089的博客 1万+

硬件原理图分析

文章目录1 硬件原理图分析1.1 MCU部分1.2 NB部分1.3 电源部分 1 硬件原理图分析 1.1 MCU部分 MCU接口部分没啥需要注意,都是常规操作。 1.2 NB部分 U4是用来防静电的。 由于NB的以上几个引脚只支持1.8V,所以这里需要3.3V转1.8V的电路。只要把握住谁改变电平就好分析是怎么实现电平转换的了。 1.3 电源部分 图中的MOS是用来实现USB和电池同时插入时只能USB供电功能的。 ...

木子皿--啥都不会的菜鸟 8170

【KITTI数据集中Raw_Data数据标定文件中的参数关系解读】

上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

weixin_43389152的博客 1526

Android Manifest详解

什么是Android应用程序的构成? Android应用程序的各个组件又是什么? 各个组件和AndroidManifest之间的关系是什么? Android应用程序由松散耦合的组件组成,并使用应用程序Manifest绑定在一起;应用程序的AndroidManifest.xml文件描述了每个组件和它们之间的交互方式。还用于指定应用程序元数据、其硬件和平台要求、外部库以及必要的权限。 Android应用程序的组件: Activity:是应用程序的表示层。应用程序中的每一个UI都是通过Activi.

yangaiyu的博客 8408

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理

用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。

qq_37366618的博客 2万+

AndroidManifest文件详解

AndroidManifest文件详解

Nohairs的博客 9747

AI辅助专利撰写实战:用Codex 30分钟生成发明专利初稿

这次我们来看一个用 Codex 从零开始撰写发明专利的实战项目。对于技术研发人员、产品经理或初创团队来说,专利申请是保护创新成果、构建技术壁垒的关键一步。然而,撰写一份高质量的专利申请书,尤其是权利要求书和说明书,往往需要专业的法律和技术语言,耗时耗力。这个项目演示了如何利用 AI 工具 Codex,在短时间内生成一份结构完整、逻辑清晰、具备授权潜力的专利申请文件初稿。 整个过程的核心不是让 AI 完全替代专利代理人,而是将其作为强大的“技术翻译”和“内容生成”助手。它能将你的技术构思、流程图、核心算法或产

weixin_32181267的博客 415

华为OD新系统机试真题-勇攀数字高峰(Java/Py/C/C++/Js/Go)

新系统 华为OD机试新系统【勇登数字高峰】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统机试真题【勇登数字高峰】

qq_45776114的博客 1548

AndroidMainfest详解

基于TV settings和SettingsProvider Android启动模式对activity行为的影响 AndroidManifest.xml文件详解 Manifest文件中,application和activity标签属性详解 android之manifest.xml内provider详解 coreApp <manifest ··· coreApp="true...

weixin_30530523的博客 708

基于Simulink的电源纹波抑制仿真

电源纹波(Power Supply Ripple)是指直流电源输出中存在的交流分量。纹波的存在会导致电压波动,进而影响负载设备的性能和寿命。为了确保高质量的电源输出,通常需要设计有效的滤波电路来抑制纹波。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电源纹波抑制方案。本教程将详细介绍如何使用 Simulink 进行电源纹波抑制的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行电源纹波抑制的仿真实例。背景介绍:理解电源纹波及其对电力电子系统的影响。仿真建模过程。

xiaoheshang_123的博客 514

activity 启动模式_Andorid四大组件—Activity篇

Activity简介android四大组件 Activity是Android的四大组件之一,同时它也是Android应用中最常见的组件之一。一个应用通常会有多个Activity,它主要负责与用户进行交互,并向用户呈现出应用此时的状态,不同的Activiy呈现给用户不同的操作体验。其实每当我们打开一个Android的app,我们都会接触到它。他其实就相当于一个屏幕,上面承载着我们所能看到和接触到的不...

weixin_39991148的博客 221

android 蓝牙通讯demo

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的一篇博文(文章结尾处有链接)深受启发,因此本文是在那篇文章的基础上更加全面的讲解。        众所周知当我们多次启动同一个Activity时,系统会创建多个实例,并把它们按照先进后出的原则一一放入

Android研发专栏 10万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Activity 四大启动模式

前言 Activity 具有4种启动模式,分别是:standard、singleTop、singleTask和singleInstance。 我们应该根据需求来为每个 Activity 指定合适的启动模式,可以在 AndroidManifest 清单文件中通过给 标签指定 android:launchMode 属性来选择启动模式。理解这些启动模式对构建用户体验良好的应用来说至关重要。standard 是 Activity 默认的启动模式。Android 使用返回栈(Task)来管理 Activity 实

weixin_44078411的博客 160

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

我所理解的activity四大启动模式

作为一名应届毕业生,每逢面试总要被问到activity的四大启动模式,搜到的这类文章也不少,但都是学术性语言偏多,打算用自己的话来说一说,若有不对的地方欢迎指出 activity四大启动模式: 1

fanfan 1801

Android应用开发(四):Activity的四大启动模式

本文主要介绍Activity的启动模式,即"standard"(默认模式)、"singleTop "、"singleTask"、"singleInstance"四大启动模式,在此之前简单总结了一下Android组件的相关知识。   1、Android组件的相关知识 对于Android应用,其应用程序的进程运行方式为:每一个应用程序都运行在它自己的Linux进程中,当应用程序中的任何代

成长Bar的博客专栏 1244

Android 精通活动「activity」四大启动模式

活动的四大启动模式 活动即「activity」对于 Android 应用来说,有着不可剥离的作用,对于初学者一般来说,都只是使用了默认(standard)模式,不管发生什么情况,只要需要活动跳转,就直接新建出一个活动,随着项目越写越复杂,活动也越写越多,反复的切换活动不仅给内存带来了负担,更是给用户带来了极大的不便。 活动「activity」四大启动模式 standard、 sin...

圆号本号 765

重温Android四大组件(二)—Activity的启动模式与标志位

前言 重温Android四大组件的第二篇,主要总结Activity的启动模式以及相关的标志位。Activity启动模式是Activity的一个重要的属性,启动模式决定了Activity在Activity栈的存在的行为。不同的启动模式下的Activity有不同的表现,所以开发者需要搞清楚各个启动模式的特性以及相互之间的区别。 Activity的启动模式 standard(标准模式):这是系统默认的...

码小二的博客 427

Android中四大组件之一的Activity的启动模式

standard:默认模式,每次新建实例,适合普通页面;singleTop:栈顶复用,避免栈顶重复创建,适合通知 / 搜索页面;singleTask:栈内单例,清理上方页面,适合应用核心页面(如首页);:全局单例 + 独立栈,仅用于系统级 / 强隔离页面,极少使用。核心原则:根据页面的 “复用需求” 和 “任务栈隔离需求” 选择启动模式,优先使用 standard/singleTop/singleTask,避免滥用 singleInstance。

weixin_39789947的博客 1251

Android activity四大启动模式详解

Activity中四大启动模式 在AndroidManifest.xml中 ,有一个默认的activity  在它里面可以设置activity启动模式,  android:launchMode="“  ,该属性用于配置Activity的加载模式,该属性支持4中属性  每不同的模式出现不同的效果,下面详解启动模式。 standard:标准模式,默认加载模式 singleTop:Task顶单

路在腳下 1525

源码分析之——Activity四大启动模式

1.源码分析之——AMS启动流程 2.源码分析之——WMS启动流程 3.源码分析之——SharedPreferences 4.源码分析之——Retrofit 5.源码分析之——OKHttp 6.源码分析之——Android事件分发机制 前言 基于源码,简单分析下Activity四大启动模式。 简介 安卓四大组件之一Activity有四种启动模式,分别为: 1.standard 标准模式,每次都会新建一个实例对象; 2.singleTop 如果在任务栈顶发现了相同的实例则重用,否则新建并压入栈顶; 3.si

aphrodite1314的博客 346
上一篇: android中常用控件的使用方法:
下一篇: 深刻理解Activity的生命周期和onSaveInstanceState()
菜鸟码农阿庆
博客等级 码龄10年 61粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值