首页 > 其他分享 >Android中Activity的启动模式

Android中Activity的启动模式

时间:2023-06-12 09:56:42浏览次数:46  
标签:返回 启动 栈顶 模式 实例 Activity Android

Android中Activity的启动模式一共有4种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定 android:launchMode属性来指定启动模式。

1、standard

在standard模式下,每当启动一个新的Activity,他就会在返回栈中入栈,并处于栈顶的位置,对于使用standard模式的Activity,系统不会在乎这个Activity是否已经在返回栈中存在,每次启动都会创建一个该Activity的新实例。

2、singleTop

可能在有些情况下,你会觉得standard模式不太合理。Activity明明已经在栈顶了,为什么再次启动的时候还要创建一个新的Activity实例呢?这时可以使用singleTop启动模式,在该模式下,启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例。

3、singleTask实例

使用singleTop启动模式可以很好的解决重复创建栈顶Activity的问题。但是如果该Activity没有处于栈顶的位置,还是会创建多个Activity实例。如果要解决这个问题就需要结组singleTask模式来实现了。当指定Activity的启动模式为singleTask时,每次启动Activity时,系统首先会在返回栈中检查是否存在该Activity实例,如果发现已经存在则直接使用该实例,并把在这个Activity之上的所有其他Activity统统出栈,使自己处于栈顶位置,如果没有发现则会创建一个新的Activity实例。

4、singleInstance

 指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity(其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)。那么这个做有什么意义呢?想象以下场景,假设我们的程序中有一个Activity是允许其他程序调用的,如果想实现其他程序和我们的程序可以共享这个Activity实例,应该如何实现呢?使用前面三种模式肯定实现不了的,因为每个应用程序都会有自己的返回栈,同一个Activity在不同的返回栈中入栈时必然创建了新的实例。而使用singleInstance模式就可以解决这个问题,在这种模式下,会有一个单独的返回栈来管理这个Activity,不管是哪个应用程序来访问这个Activity,否会用同一个返回栈,也就解决了共享Activity实例的问题。

tip:Activity中可以打印出当前返回栈的ID

Log.d("SecondActivity", "$this  Task id is $taskId")

 

标签:返回,启动,栈顶,模式,实例,Activity,Android
From: https://www.cnblogs.com/shibin90/p/17458813.html

相关文章

  • 电脑密码重置盘和启动盘
    电脑密码重置盘:设置了系统登录密码后,是否担心万一有一天忘记密码而无法顺利登陆系统呢?可以事先制作好一个系统密码重置盘就可以了。什么是密码重置盘呢?密码重置盘是windows系统用来以防用户忘记密码而推出的一个U盘小工具,只要事先制作一个密码重置盘,随便在什么时候忘记了密码都可......
  • Linux的启动顺序
      Linux是一个多用户、多任务‘支持多线程和多CPU的操作系统,可以想象到它的启动会有多么复杂。                  1.Linux的启动流程及涉及的程序或者模块  在你打开计算机的电源之后,计算机的硬件会启动BIOS或者UEFI来加载并检查设备,比如......
  • 启动环境+拉取项目+网关过滤器逻辑
    服务器与服务器传输,当前在一台服务器,所有直接找到jenkens,cp拷贝即可,;若是不同的服务器,要用scp配置源码:仓库,触发器:什么时候构建,构建环境:前端后端构建后端环境时,需要传参启动项目,可以不用进入jenkensRBAC权限控制用户关联角色,角色关联用户​权限管理系统......
  • Fabric不能启动后台进程问题
    在用Fabric启动远程后台进程时,由于自己的后台程序使用类似下面的方式后台运行,导致后台进程不能启动成功 javaMyServer&看了一下官方文档,说是有几种方式可以解决这个问题,下面是我使用的方法首先修改自己的启动后台进程的脚本 nohupjavaMyServer&>/dev/null&然后......
  • SpringCloud启动不了,报错
    初学SpringBootCloud启动遇到以下报错***************************APPLICATIONFAILEDTOSTART***************************Description:Webapplicationcouldnotbestartedastherewasnoorg.springframework.boot.web.servlet.server.ServletWebServerFactoryb......
  • 启动word时总是弹出Microsoft Visual Basic运行错误提示框,解决方法如下
    1、启动word,找到加载项名称为:NEWebWordAddin.dotm,类型应该时是模版版,看其所在位置,我的电脑显示位置是:C:\Users\18308\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Roaming\Microsoft\Word2、为保持原有数据   进入该位置,将STARTUP改成bak_......
  • Android带文字的ImageButton实现
    实际上,ImageButton是不能添加文字的,所以我选择将ImageView控件和TextView控件封装在一个LinearLayout里面,整个LinearLayout就是一个按钮,然后对它监听单击等动作。首先贴上layout.xml里面的布局设计: <LinearLayout02 android:layout_width="wrap_content"0......
  • Redis安装与启动(Linux)
    安装Redis依赖yuminstall-ygcctcl上传安装包并解压redis.io下载安装包,上传到/usr/local/src目录解压tar-zxvfredis-6.2.6.tat.gz解压成功 进入安装目录,运行编译命令cdredis-6.2-6/make&&makeinstall默认的安装路径在/usr/local/bin下默认启动(不友好......
  • 首次启动Kafka报Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memor
    首次启动Kafka报错如下:原因:内存不足,查看启动配置调小一些:......
  • spring boot jar Initialized JPA EntityManagerFactory 失败【导致jar启动闪退】
    2023-06-1021:29:04.460WARN24060---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.BeanCreationException:Errorcreating......