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 启动模式的详细说明,根据需要选择合适的模式来优化用户的导航体验和应用的任务管理。

相关推荐
花追雨7 小时前
Android -- 双屏异显之方法一
android·双屏异显
小趴菜82277 小时前
安卓 自定义矢量图片控件 - 支持属性修改矢量图路径颜色
android
氤氲息7 小时前
Android v4和v7冲突
android
KdanMin7 小时前
高通Android 12 Launcher应用名称太长显示完整
android
chenjk47 小时前
Android不可擦除分区写文件恢复出厂设置,无法读写问题
android
袁震7 小时前
Android-Glide缓存机制
android·缓存·移动开发·glide
工程师老罗7 小时前
Android笔试面试题AI答之SQLite(2)
android·jvm·sqlite
User_undefined8 小时前
uniapp Native.js 调用安卓arr原生service
android·javascript·uni-app
安小牛8 小时前
android anr 处理
android
刘争Stanley11 小时前
如何高效调试复杂布局?Layout Inspector 的 Toggle Deep Inspect 完全解析
android·kotlin·android 15·黑屏闪屏白屏