Android Activity启动模式面试题

在Android面试中,Activity启动模式是高频考点,需深入理解其机制与应用场景。以下是精讲内容,结构清晰,便于记忆与表达:


1. 四种启动模式的核心区别

  • standard(默认模式)

    • 每次启动均创建新实例,遵循"后进先出"的栈结构。
    • 示例:从Activity A(standard)跳转自身,栈中不断新增A的实例。
  • singleTop(栈顶复用)

    • 若目标Activity位于栈顶,则复用实例(调用onNewIntent),否则新建。
    • 应用场景:防止连续点击导致重复页面(如支付按钮跳转)。
  • singleTask(栈内单例)

    • 在指定任务栈中保持唯一实例。若存在,则清除其上方所有Activity,并调用onNewIntent
    • 关键点 :通过taskAffinity指定任务栈,默认与包名一致。
    • 典型应用:App主页(如微信主界面)。
  • singleInstance(全局单例)

    • 独占一个任务栈,且栈内仅自身。其他Activity启动时进入其他栈。
    • 使用场景:独立运行的界面(如系统拨号盘)。

2. 高频面试题解析

Q1:singleTask与taskAffinity的关系?

    • 默认情况下,singleTask的Activity位于应用主任务栈。
    • 若设置不同taskAffinity,则会创建新任务栈。例如,Activity A设置singleTasktaskAffinity="com.example.task2",启动时会新建独立栈。

Q2:从Activity A(standard)启动B(singleTask),B启动C(singleTop),C再启动B,栈状态如何?

    1. A启动B → 新建任务栈(假设B的taskAffinity不同),栈1:[A],栈2:[B]。
    2. B启动C → 栈2变为[B, C]。
    3. C启动B → 栈2中B已存在,清除C,调用onNewIntent,栈2:[B]。

Q3:onNewIntent调用时机与数据处理?

    • 在singleTop/singleTask模式下,若Activity被复用,系统调用onNewIntent()

    • 关键代码

      java 复制代码
      @Override
      protected void onNewIntent(Intent intent) {
          super.onNewIntent(intent);
          setIntent(intent); // 更新Intent
          handleData(intent); // 处理新数据
      }

3. Intent Flags与启动模式的协同

  • FLAG_ACTIVITY_NEW_TASK
    • 结合taskAffinity创建新任务栈。若未指定,则与默认栈行为一致。
  • FLAG_ACTIVITY_SINGLE_TOP
    • 等同于singleTop模式,优先复用栈顶实例。
  • FLAG_ACTIVITY_CLEAR_TOP
    • 若目标Activity已存在,清除其上方所有实例。与singleTask配合时,复用实例;否则销毁重建。

4. 典型场景与误区

  • 场景:避免重复打开同一页面

    • 方案 :对详情页使用singleTop,或在Intent中添加FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP
  • 误区:singleTask一定在新栈中?

    • 错误!仅当taskAffinity与当前栈不同时,才会创建新栈。

5. 生命周期与启动模式

  • 复用Activity时的生命周期
    顺序为:原实例onPause() → 新实例onCreate()(若新建) → 原实例onNewIntent()onResume()

总结

  • 核心口诀
    • standard堆叠无脑创,singleTop栈顶防重复。
    • singleTask栈内单例清上方,singleInstance孤独一栈无同伴。
  • 面试技巧:结合绘图(任务栈变化)和实际代码逻辑,展示对机制的透彻理解。
相关推荐
游戏开发爱好者81 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20352 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥2 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓2 小时前
[JDBC]元数据
android
独行soc2 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能2 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿2 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc3 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20353 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106323 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview