当前位置:首页 > 行业动态 > 正文

安卓基础之Activity启动模式

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:SingleTopSingleTask的区别是什么?

解答

安卓基础之Activity启动模式  第1张

  • SingleTop:仅检查当前任务栈的顶部,如果目标Activity在栈顶则复用,否则创建新实例,不会改变栈中其他Activity的状态。
  • SingleTask:检查整个任务栈,如果目标Activity已存在,则会销毁其上方的所有Activity并复用该实例,从A→B→C,若C的启动模式为SingleTask,再次启动C时,A和B会被销毁,C复用并成为栈顶。

问题2:如何选择合适的启动模式?

解答

  • Standard:通用场景,无特殊需求时使用。
  • SingleTop:防止快速重复启动同一页面(如双击返回键处理)。
  • SingleTask:需要页面唯一性且需清理上级页面(如主页面返回时直接回到首页)。
  • SingleInstance:需要完全独立的页面(如系统级弹窗或独立功能模块
0