Android Activity 的启动模式(Launch Mode)

2024-08-27 07:52

本文主要是介绍Android Activity 的启动模式(Launch Mode),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.  什么是 Activity 的启动模式?

Activity 的启动模式决定了在启动一个 Activity 时,它在任务栈中的行为。任务栈(Task Stack)是一个先进后出的堆栈结构,管理着应用中的 Activity。通过配置启动模式,我们可以控制 Activity 在任务栈中的实例化和复用行为,从而优化用户体验和应用性能 

2. 四种启动模式详解

  • standard 

    ------------------------| Activity A           |------------------------| Activity B           |------------------------| Activity A           |------------------------

这是默认的启动模式。每次启动 Activity 时都会创建一个新的实例,并将其推入任务栈中。

特点:

  • 每次启动都会创建新的实例。
  • 每个实例都会有一个独立的生命周期。

使用场景:

  • 适用于大多数需要多次实例化的 Activity,比如一个普通的详情页面。

示例:

<activity android:name=".StandardActivity"android:launchMode="standard" />
  • singleTop

如果要启动的 Activity 已经位于任务栈的栈顶,则不会创建新的实例,而是复用栈顶的实例,并调用其 onNewIntent 方法。

    ------------------------| Activity A           |------------------------| Activity B           |------------------------| Activity A (复用)     |------------------------

特点:

  • 如果 Activity 已在栈顶,则复用该实例。
  • 否则,创建新的实例。

使用场景:

  • 适用于频繁跳转回同一页面的情况,比如通知点击后打开的页面。

示例:

<activity android:name=".SingleTopActivity"android:launchMode="singleTop" />
  • singleTask

如果要启动的 Activity 在任务栈中已经存在,则会复用该实例,并将其上的所有其他 Activity 移出栈外,同时调用 onNewIntent 方法。

    ------------------------| Activity A           |------------------------| Activity B           |------------------------| Activity C           |------------------------| Activity A (复用)     |------------------------

特点:

  • 复用任务栈中已有的实例。
  • 清除该实例之上的所有 Activity。

使用场景:

  • 适用于需要确保某个 Activity 只有一个实例的情况,比如应用的主页面。

示例:

<activity android:name=".SingleTaskActivity"android:launchMode="singleTask" />

  • singleInstance

这种模式类似于 singleTask,但它会为该 Activity 创建一个单独的任务栈,并且该栈中只能有这一个 Activity 实例。

    独立任务栈:------------------------| Activity A (独立)     |------------------------

特点:

  • 复用独立任务栈中的唯一实例。
  • 该任务栈中只能有这一个 Activity。

使用场景:

  • 适用于需要独立任务栈的特殊页面,比如视频播放或电话拨号页面。

示例:

<activity android:name=".SingleInstanceActivity"android:launchMode="singleInstance" />

3. 如何在 AndroidManifest.xml 中配置启动模式

在 AndroidManifest.xml 文件中可以通过 android:launchMode 属性配置 Activity 的启动模式。

示例:

<application ... ><activity android:name=".MainActivity"android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>

4. 使用 Intent Flags 控制启动模式

除了在 AndroidManifest.xml 中配置启动模式,还可以通过 Intent 的 flags 动态控制 Activity 的启动行为。

常用的 flags:

  • FLAG_ACTIVITY_NEW_TASK
  • FLAG_ACTIVITY_SINGLE_TOP
  • FLAG_ACTIVITY_CLEAR_TOP

示例:

val intent = Intent(this, SingleTopActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)

这篇关于Android Activity 的启动模式(Launch Mode)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111078

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式