Android中Activity启动的模式

在 Android 开发中,Activity 的启动模式(Launch Mode)定义了当启动一个 Activity 时,系统会如何处理它的实例。不同的启动模式可以影响 Activity 在任务栈中的管理方式,对用户的使用体验产生直接影响。下面详细介绍四种主要的启动模式:

1. standard 模式

  • 描述:这是默认的启动模式,每次启动 Activity 时都会创建一个新的实例,不管任务栈中是否已经存在该 Activity 的实例。
  • 适用场景:适用于不需要重用的界面,每次启动时都希望展示新的内容。
xml 复制代码
<activity android:name=".MyActivity"
    android:launchMode="standard" />

示例

kotlin 复制代码
// 每次调用都会启动一个新的实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:每次调用 startActivity(),都会将新的 Activity 放在栈顶。多个实例可以同时存在。

2. singleTop 模式

  • 描述:如果新启动的 Activity 已经位于任务栈的栈顶,则不会创建新的实例,而是复用现有实例。如果不在栈顶,则会创建新实例。
  • 适用场景:适合在某些情况下避免重复启动同一个 Activity,比如点击通知多次打开同一界面。
xml 复制代码
<activity android:name=".MyActivity"
    android:launchMode="singleTop" />

示例

kotlin 复制代码
// 如果MyActivity已经在栈顶,那么不会创建新的实例,而是复用已有的实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:当该 Activity 已经在栈顶时,不会创建新实例,而是调用现有实例的 onNewIntent() 方法。

3. singleTask 模式

  • 描述:如果在任何任务栈中已经存在该 Activity 的实例,则不会创建新的实例,而是将其带到前台,并清除其上方的所有其他 Activity。
  • 适用场景:适合需要独占任务栈的 Activity,如主页或单一功能页面。
xml 复制代码
<activity android:name=".MyActivity"
    android:launchMode="singleTask" />

示例

kotlin 复制代码
// 启动MyActivity时,如果已存在该实例,会清除其上方所有Activity
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为:若栈中已有该 Activity 实例,则直接将该实例带到前台并清除其上方的所有 Activity。如果不存在,则创建新的实例。

4. singleInstance 模式

  • 描述:此模式会为该 Activity 创建一个专属的任务栈。在任何任务中只能有一个实例存在,每次启动时都会复用该实例。
  • 适用场景:用于需要独占一个任务栈的 Activity,通常用于特殊功能,如浮动的 Activity 或全屏显示的 Activity。
xml 复制代码
<activity android:name=".MyActivity"
    android:launchMode="singleInstance" />

示例

kotlin 复制代码
// 启动MyActivity时,它会运行在独立的任务栈中,且不会创建新实例
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • 栈行为 :该 Activity 始终处于独立的任务栈中,任何启动请求都会直接复用该实例,不会创建新的实例。其他应用也可以启动这个 Activity,但只能通过其单一实例。

小结

启动模式 新实例条件 复用条件
standard 每次启动都会创建新的实例 无法复用
singleTop 栈顶没有实例时创建新的实例 栈顶已有实例时复用,调用 onNewIntent()
singleTask 任务栈中不存在实例时创建新的实例 任务栈中存在时,复用并清空其上方 Activity
singleInstance 独立栈中不存在实例时创建 任务栈中存在时直接复用

以上是 Android 中四种 Activity 启动模式的详细说明,根据需要选择合适的模式来优化用户的导航体验和应用的任务管理。

相关推荐
唐诺8 分钟前
android MQTT使用示例
android·mqtt
菠菠萝宝8 分钟前
【YOLOv8】安卓端部署-1-项目介绍
android·java·c++·yolo·目标检测·目标跟踪·kotlin
main_Java9 分钟前
Android7点开语言直接显示语言偏好设置
android
iOSTianNan13 分钟前
[RN -Android] waiting for debugger 问题解决
android
IT生活课堂25 分钟前
Android智能座舱,视频播放场景,通过多指滑屏退回桌面,闪屏问题的另一种解法
android·智能手机·汽车
竹言笙熙43 分钟前
极客大挑战2024wp
android
main_Java1 小时前
Android解压zip文件到指定目录
android·java·开发语言
Sgq丶1 小时前
Android 13 aosp Launcher 隐藏“壁纸和样式“入口
android·aosp·launcher3
Crossoads2 小时前
【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式
android·开发语言·javascript·汇编·人工智能·数据挖掘·c#
老码沉思录7 小时前
Android开发实战班 -应用架构 - MVVM 架构模式
android·架构