我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android LaunchMode四种启动模式详细介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android LaunchMode四种启动模式详细介绍

Android LaunchMode详解

越是做的时间越长,基础知识就忘的越干净,最近做一个项目中,发现启动的几个Activity居然重叠了,我ri~~,再不回忆一下就要退出Android界了。

概念解释

Task

Task叫做任务,这个简单,表示我们需要完成的事情,注意,这里我们说的是任务,是个名词,例如要发短信,那我们的任务就是发送一条短信,仅此而已,再例如教官说:”张三,你去吃屎!”,ok,那张三的任务就是吃屎。

Back Stack

我们常叫做回退栈,或者是任务栈,这个是什么意思呢?上面我们说过,需要完成任务,那我们就需要使用一系列的Activity来完成,例如发短信,则完成该任务需要如下步骤:

打开短信主页面MainActivity 点击添加短信按钮,打开NewSMSActivity 在NewSMSActivity中编写短信并发送

以上的任务中涉及到两个Activity,那这两个Activity就存放在这个Back Stack中,又因为Back Stack是栈类型的数据结构,所以上面的步骤在这个Back Stack中的活动顺序如下:

MainActivity先压栈 点击添加按钮,NewSMSActivity压栈, 短信发送完成,点击返回按钮,NewSMSActivity弹栈,回到MainActivity 在MainActivity点击返回按钮,MainActivity弹栈,此时该Back Stack为空,就返回到Launcher了

所以我们明白了,这个回退栈其实就是一个存储Activity实例的容器,执行每个Task时,先创建一个Back Stack,在Task执行过程中将所使用的Activity都按照FILO的顺序以此压入这个Back Stack,Task目标完成之后,按下返回按钮时,Back Stack中的Activity按照压栈相反地的顺序以此弹栈,直到栈中没有Activity实例时,进入Launcher。

由此,我们还可以知道,每个Task和Back Stack是一一对应的关系,一般情况下,每需要执行一个Task时,都至少需要一个Back Stack容器,并且这个容器中都至少会有一个Activity实例。

LaunchMode的作用和使用方法

一般情况,如果没精神病,LaunchMode是用在Activity上面的,我们就谈谈在Activity上的LaunchMode

LaunchMode作用

顾名思义,LaunchMode就是启动模式,啥是启动模式?启动模式意思是使用不同的模式启动之后,会有不同的属性和表现,举个例子,钢铁侠使用正常模式启动,一般可以秒杀所有小兵小将,但是如果对付发狂的绿巨人浩克,就需要启动超强模式,穿上反浩克装甲,要不然打不过,放到我们Actiivty这里也是一样,既然是配置在Activity上的,那就说明Activity有好几种启动模式,使用不同的启动模式启动的Activity有不同的属性和表现。

那为啥需要启动模式呢?需求!对,需求是所有东西被建立或者被制造出来的原因,因为我们对Actiivty有不同的需求,举个老生常谈的发邮件例子,邮件主页Activity要求不论怎么打开,打开多少次,就只能有一个主页Activity的实例,对吧,如果有多个实例我们就很麻烦,不知道显示哪个,也不知道要关闭哪个,那这就是个需求,对应这个需求,我们就需要对这个主页Activity设置一种启动模式,不论怎么打开就只有一个实例,这样需求就满足啦。

LaunchMode使用方法

按照Android Developer上的说明,LaunchMode有两个使用地方,一个是Mainfest的activity节点下,一个是在startActivity方法的Intent中设置Flag,第二种方法我们后续再讨论,先说说第一种方法。

要告诉小白的是,LaunchMode要在启动该Activity之前使用才有效,如果Activity都已经启动了,实例都创建完了,再设置什么模式都没用啦。

第一种使用方式特别简单,在Mainfest中的activity节点中添加android:launchMode即可,如下所示:


<activity
  android:name=".MainActivity"
  android:label="邮件列表"
  android:launchMode="singleTask">
</activity>

有四种launchMode可选,分别是:

“standard” “singleTop” “singleTask” “singleInstance”

如果不添加launchMode也可以,默认的launchMode是”standard” 。

按照Android Developer官方上,他们按照Activity是否可以被实例化多次,把这四个模式分了两个组, “standard” 和”singleTop” 属于可以被实例化多次这个组,他们的实例可以属于任何Task,并且可以位于Back Stack的任何位置,其余两个属于不可被实例化多次这组,他们常用于启动一个Task,所以一个Task只有一个这种实例,并且这个还往往位于Back Stack的最开始。这种分组可以帮助我们初步理解每种启动模式的区别。

standard

从现在开始好好讲解这四种启动模式了,首先看看”standard”,有时称为标准模式。

前面我们说过,Activity默认就是这种模式的,所以你的Activity设置和不设置这个没什么区别,那这种模式的表现是什么样子的呢?

假设我们有一个”standard”模式的Activity,页面上有个按钮,点击这个按钮就会启动这个Activity自身,由于设置的是”standard”模式,每次启动这个Activity,就会创建这个Activity的新的实例,并依次放入Back Stack,点击一百次就会创建一百个这个Activity的实例。

“standard”是最简单的模式,也符合我们正常的思维逻辑,所以最好理解,我用简陋的画图工具画了个图,凑合着看吧:

standard模式

singleTop

这种启动模式和标准模式区别不大,只有一点点不同。

我们已经知道,每个Activity的实例在Back Stack中存储,既然是个Stack数据结构,那么第一个压栈的实例我们叫做栈底实例,因为它将被后进来的实例压在最下面,最后被压入的实例,称作栈顶实例,因为它刚被压人栈中,暂时还没有其他实例在它之上,如果栈中只有一个实例,那这个实例既是栈底实例,也是栈顶实例。

明白了栈底和栈顶的概念,”singleTop” 就好理解了,当我们启动”singleTop” 模式的Activity时,系统会检查当前的Back Stack的栈顶实例是不是这个”singleTop” 模式Activity的实例,如果是的话,就不创建新的实例了,直接复用这个已经存在的栈顶实例。还拿我们上一个场景为例,如果这个Activity是”singleTop” 模式的,不论你怎么点按钮,Back Stack只会有一个实例,因为栈顶已经存在一个这样的实例,所以不会创建新的了。

如果上个例子不够明确,我们可以举个比较明显的例子,有两个Activity:ActivityA是标准模式,AvtivityB是”singleTop” 模式,完成一个Task,需要经过以下步骤:

启动ActivityA,在ActivityA中点击按钮启动ActivityB, 在ActiivtyB中点击按钮,再次启动ActivityB

根据之前的描述,当ActivityB的实例第一次被创建时,是位于栈顶的,第二次尝试创建ActivityB的实例之前,由于是”singleTop” 模式,并且栈顶已经有它的实例,就不会再创建新的,这个Task完成之后,Back Stack中只有一个ActivityA的实例和一个ActivityB的实例,简图如下:

"singleTop" 模式

singleTask

接下来是”singleTask” 模式,还记得文章开头说的两个分组和区别吗?如果你现在还记得,那你就理解了一大半了。

之前说过,”singleTask” 的Activity在一个Back Stack只会创建一个,这是和前两个模式最大的不同,”singleTask” 和”singleTop”不同之处在于,创建实例时不仅仅只检查栈顶是否已经有实例,还会检查整个Back Stack,只要Back Stack已经存在实例,不论是位于栈顶,栈底还是哪里,都不会创建新的实例。

“singleTask” 模式不仅不会创建新的实例,还会将从已经创建实例开始到栈顶的所有实例全部清除,并将已经创建的实例放到栈顶,因为只有这样做才会让这个实例可以显示到窗口上。

还是继续上面的例子,ActivityC的启动模式为”singleTask” ,我们在Back Stack中原来的ActivityA和ActivityB实例之间插入一个ActivityC的实例,形成这样的Back Stack结构之后,如果再次尝试启动ActivityC时,由于ActivityC的实例已经存在,所以复用已经存在的实例,并且清除实例到栈顶的所有实例,所以ActivityB的实例被清除了,此时Back Stack中就只有ActivtyA和ActivtyC的实例。

"singleTask" 模式

singleInstance

“singleInstance”是最后一个启动模式,则是和其他三个模式都不同的。

我们之前谈论的启动模式,基本都是在一个Back Stack范围内谈论是否需要重新创建的问题,在这里,我们把范围扩大一下,讨论在多个Back Stack之间重新创建的问题,设置了”singleInstance”模式的Activty,在启动的时候,会脱离于当前Task的Back Stack,在一个新的Back Stack中创建实例。

还是我们之前的例子,现在把ActivtyA,ActivityB和ActivtyC的实例依次放入Back Stack中,并将这个Back Stack编为1号,然后编写一个ActivityD并将其设置为”singleInstance”模式,此时,如果我们在ActivityC中启动ActivityD,那么ActiviyD的实例将不会位于1号Back Stack中,它将会在一个新的Back Stack中创建一个新的ActivityD实例,简图如下:

"singleInstance"模式

使用场景

不同的启动模式,适用与应用中的不同应用场景。

standard

标准模式适用于大多数场景,因为在应用中,我们基本上可以允许用户同时进行多个任务,每个任务操作不同的数据,这样允许创建一个Activty的多个实例,例如新建邮件Activity,如果当前正在新建一个给张三的邮件,此时同时需要创建一个给李四的邮件,此时Activty就要使用标准模式,这样允许创建多个不同的实例,允许创建多封邮件。

singleTop

singleTop模式,由于其特点是检查栈顶实例,可以用这个特性,防止短时间创建多个实例,例如有个按钮,点击之后打开一个播放视频的Activty,如果用户短时间重复点击,不是singleTop模式的话,就会短时间在Back Stack中出现多个实例,而且每个实例的播放进度不一致,如果是singleTop模式的话,不论打开多少次都没有影响。

singleTask

这个模式,常用于那些有一定任务,且任务已经进行了一部分,但是忽然又去做别的事情了,等会儿回来还要继续任务的场景,还是播放那个视频的例子,如果正在播放的时候需要去打开新Activty搜索相关视频,搜索完毕又要回到播放页面,那这个页面就比较适合使用singleTask模式

singleInstance

这种模式较少使用,如果一定要在你的应用中使用这种启动模式,请提前考虑好是否有这个必要,另外,在做一些特殊场景下的应用,比如Launcher的主屏时,可能会使用得到。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Android中activity的启动模式Android 启动模式详细介绍Android编程中Activity的四种启动模式Android Activity启动模式之singleTask实例详解Android Activity启动模式之singleTop实例详解Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)Android 两种启动模式的实例详解


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android LaunchMode四种启动模式详细介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android LaunchMode四种启动模式详细介绍

Android LaunchMode详解 越是做的时间越长,基础知识就忘的越干净,最近做一个项目中,发现启动的几个Activity居然重叠了,我ri~~,再不回忆一下就要退出Android界了。 概念解释 Task Task叫做任务,这个简
2022-06-06

Activity 四种启动模式详细介绍

Activity 四种启动模式详细介绍在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。Andr
2023-05-31

Android 启动模式详细介绍

Android 启动模式: 启动模式:LaunchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个t
2022-06-06

Android安卓 Activity四种启动模式(launchMode) standard, singleTop, singleTask, singleInstance

启动模式的重要性 Android编程中经常涉及到页面的切换,启动一个新的页面(或者说Activity)的时候需要为其指定合适的“启动模式”。指定的启动模式不合适,会出现类似下面这种奇怪的效果: 你拿起QQ切换了一个新的账号,一直按返回却没有
2022-06-06

简单介绍Android中Activity的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Activity有四种启动模式:1. sta
2022-06-06

Android之Activity的四种启动模式

实例背景:用于四个页面跳转 准备工作 activity_main.xmlactivity1.xmlactivity2.xmlactivity3.xmlMainActivity.java public class MainActivity e
2022-06-06

Java的24种设计模式详细介绍

这篇文章主要介绍“Java的24种设计模式详细介绍”,在日常操作中,相信很多人在Java的24种设计模式详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的24种设计模式详细介绍”的疑惑有所帮助!
2023-06-16

Android 访问文件权限的四种模式介绍

Linux文件的访问权限* 在Android中,每一个应用是一个独立的用户 * drwxrwxrwx * 第1位:d表示文件夹,-表示文件 * 第2-4位:rwx,表示这个文件的拥有者(创建这个文件的应用)用户对该文件的权限 * r:读 *
2022-06-06

Android编程中Activity的四种启动模式

本文实例讲述了Android编程中Activity的四种启动模式。分享给大家供大家参考,具体如下: Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据
2022-06-06

python 开发的三种运行模式详细介绍

Python 三种运行模式Python作为一门脚本语言,使用的范围很广。有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程。不管怎么说,怎么使用python既取决于你自己的业务场景,也取决于你自己的pyth
2022-06-04

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launch
2022-06-06

Android 两种启动模式的实例详解

Android 两种启动模式的实例详解Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONTActivity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和
2023-05-30

详解Android中Activity的四大启动模式实验简述

作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,来帮助大家理解Activity的四大启动模式。 演示效果如下:第
2022-06-06

android 四种活动启动模式的区别:1.standard、2.singleTop、3.singleTask、4.singleInstance

一般的,活动会放在一个返回栈中。 在AndroidManifest.xml的活动中注册android:launchMode=" 四种启动模式 " 1、standard:通过intent启动活动时直接创建新活动,如果启动的是自己这个活动也会
2022-06-06

Oracle 数据库启动过程的三阶段、停库四种模式详解

目录数据库的启动过程(3个台阶)1.nomount2.mount3.open数据库的启动过程(3个台阶)1.nomountshutdown --> nomountstartup nomountselect status from v
2022-11-21

win10如何取消手机软件启动win10撤销手机软件启动方式 详细介绍

有一些手机软件在用户启动的过程中便会跟随启动,假如那样的手机软件过多得话会拖慢你的开机速度,那麼win10如何取消手机软件启动启动呢?你先开启资源管理器,转换到启动菜单栏,那样就能看见这些启动启动的手机软件,鼠标右键选定要想撤销自启动的手机
2023-07-14

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录