上一篇
安卓基础之Activity启动模式
- 行业动态
- 2025-04-23
- 4412
Android Activity启动模式:standard新建实例,singleTop复用栈顶,singleTask提至栈顶并清中间,singleInstance独立栈,各模式控制实例与栈行为
Activity启动模式详解
Standard(标准模式)
- 特点:每次启动都会创建新的Activity实例,并放入当前任务栈的顶部。
- 行为:
- 系统默认的启动模式。
- 多个实例可共存于同一任务栈中。
- 用户按返回键会依次销毁栈中的Activity。
- 适用场景:大多数普通页面跳转,无需复用或限制实例数量的情况。
SingleTop(栈顶复用模式)
- 特点:如果目标Activity已位于任务栈顶部,则复用该实例;否则创建新实例。
- 行为:
- 仅检查栈顶,若栈顶不是目标Activity,仍会创建新实例。
- 适用于防止快速连续点击时重复创建相同页面。
- 示例:从A启动B,B的启动模式为SingleTop,再次启动B时,若B已在栈顶,则直接使用原实例。
SingleTask(任务栈内单例模式)
- 特点:整个任务栈中仅保留一个目标Activity实例。
- 行为:
- 若目标Activity已存在于当前任务栈,则将栈中该实例之上的所有Activity销毁,并复用目标实例。
- 若目标Activity不在当前任务栈,则创建新实例并压入栈。
- 适用场景:需要某个页面始终唯一(如浏览器主页面),且从其他任务返回时需直接回到该页面。
SingleInstance(全局单例模式)
- 特点:Activity单独占用一个任务栈,且全局唯一。
- 行为:
- 启动时系统会创建一个新任务栈,并将该Activity实例放入栈中。
- 后续启动同类型的Activity都会复用该实例。
- 适用场景:需要完全独立的页面(如闹钟弹窗),不受其他Activity影响。
启动模式对比表
启动模式 | 是否创建新实例 | 是否复用实例 | 任务栈行为 |
---|---|---|---|
Standard | 是 | 否 | 压入新实例到当前任务栈 |
SingleTop | 仅当栈顶无实例时 | 仅复用栈顶实例 | 不会改变栈内其他实例 |
SingleTask | 仅当任务栈无实例时 | 复用并清理栈顶之上的实例 | 将目标实例之上的Activity全部出栈 |
SingleInstance | 是(新任务栈) | 复用独立任务栈中的实例 | 创建独立任务栈,仅含自身实例 |
相关问题与解答
问题1:SingleTop
和SingleTask
的区别是什么?
解答:
- SingleTop:仅检查当前任务栈的顶部,如果目标Activity在栈顶则复用,否则创建新实例,不会改变栈中其他Activity的状态。
- SingleTask:检查整个任务栈,如果目标Activity已存在,则会销毁其上方的所有Activity并复用该实例,从A→B→C,若C的启动模式为SingleTask,再次启动C时,A和B会被销毁,C复用并成为栈顶。
问题2:如何选择合适的启动模式?
解答:
- Standard:通用场景,无特殊需求时使用。
- SingleTop:防止快速重复启动同一页面(如双击返回键处理)。
- SingleTask:需要页面唯一性且需清理上级页面(如主页面返回时直接回到首页)。
- SingleInstance:需要完全独立的页面(如系统级弹窗或独立功能模块