文章目录
AI就是AI,超级给力,比我总结的好多了。
Android 中的 Activity 启动模式(Launch Mode)决定了新实例如何被创建以及它如何与任务栈(Task Stack/Back Stack)交互。
Activity主要有四种标准模式。
正文
以下是详细的解析:
1. Standard (标准模式)
配置方式:不设置
launchMode属性,或设置为standard(默认值)。行为特点:
每次启动都会创建一个新的实例。
新实例会被压入当前任务栈的栈顶。
即使栈中已经存在该 Activity 的实例,也不会复用,而是继续创建新的。
典型场景:新闻详情页、邮件列表点击进入详情。用户多次点击会生成多个页面,按返回键会依次关闭。
示例:栈结构
[A, B],再次启动B->[A, B, B]。
2. SingleTop (栈顶复用模式)
配置方式:
android:launchMode="singleTop"行为特点:
如果要启动的 Activity 已经位于任务栈的栈顶,则不会创建新实例,而是复用栈顶实例,并调用其
onNewIntent()方法。如果该 Activity 在栈中但不在栈顶,或者根本不在栈中,则会创建一个新的实例并入栈。
典型场景:通知栏点击跳转。
示例:
栈
[A, B],启动B(B在栈顶) -> 复用 B,调用onNewIntent,栈仍为[A, B]。栈
[A, B, C],启动B(B不在栈顶) -> 创建新 B,栈变为[A, B, C, B]。
3. SingleTask (栈内单例模式)
配置方式:
android:launchMode="singleTask"行为特点:
在整个任务栈中,该 Activity 只有一个实例。
如果栈中已存在该实例,系统会将该实例之上的所有其他 Activity 全部出栈(销毁),使该实例成为栈顶,并调用其
onNewIntent()方法。如果不存在,则创建新实例并入栈。
通常用于作为应用程序的主入口或主要功能模块。
典型场景:浏览器主页、应用的首页。用户从深层页面跳回首页时,希望清空中间的临时页面。
示例:
栈
[A, B, C],启动B(SingleTask) -> 销毁 C,将 B 移至栈顶,调用onNewIntent,栈变为[A, B]。
4. SingleInstance (单实例模式)
配置方式:
android:launchMode="singleInstance"行为特点:
该 Activity 独占一个任务栈。
系统中只允许存在一个该 Activity 的实例。
无论从哪里启动它,如果它已经存在,都会直接复用并调用
onNewIntent();如果不存在,则创建一个新的任务栈并将它放入其中。它不能与其他 Activity 共享同一个任务栈。
典型场景:来电显示界面、闹钟提醒界面、系统级的分享选择器。这些界面需要独立于应用的其他流程,且全局唯一。
示例:
应用栈
[A, B],启动C(SingleInstance) -> 创建新栈[C]。此时系统有两个栈:
[A, B]和[C]。如果在
C中启动D(Standard),D会进入C所在的栈(取决于具体实现和 intent 标志,通常 SingleInstance 栈中很少再压入其他普通页面,或者D会回到启动者的栈)。注:SingleInstance 的设计初衷通常是让它独立,它启动的其他 Activity 通常会运行在调用者的任务栈中,具体行为较复杂,需谨慎使用。
配合 Intent Flag 使用
除了通过 AndroidManifest.xml 配置,还可以在代码中通过 Intent.addFlags() 动态指定行为,常用的有:
FLAG_ACTIVITY_NEW_TASK:效果类似singleTask,常用于从非 Activity 上下文(如 Service)启动 Activity。FLAG_ACTIVITY_SINGLE_TOP:效果类似singleTop。FLAG_ACTIVITY_CLEAR_TOP:如果目标 Activity 在栈中,清除其上方的所有 Activity。若目标不是singleTask,则会销毁旧实例并创建新实例;若是singleTask,则复用旧实例。
总结对比表
| 模式 | 是否总是新建 | 栈中是否存在即复用 | 是否清除上方元素 | 典型用途 |
|---|---|---|---|---|
| Standard | 是 | 否 | 否 | 普通页面流转 |
| SingleTop | 否 (仅当在栈顶) | 是 (仅当在栈顶) | 否 | 通知栏跳转、避免重复刷新 |
| SingleTask | 否 | 是 (全局唯一) | 是 | 应用主页、浏览器根页 |
| SingleInstance | 否 | 是 (全局唯一) | 是 (独占新栈) | 来电、闹钟、系统级弹窗 |
参考文章
AI总结
联系我们

微信号:rssme_com