news 2026/2/24 12:59:29

Android中四大组件之一的Activity的启动模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android中四大组件之一的Activity的启动模式

Android 中 Activity 这个核心组件的启动模式,这是理解 Android 页面跳转和任务栈管理的关键知识点。

Activity 启动模式详解

Activity 的启动模式(Launch Mode)决定了新的 Activity 实例如何与任务栈(Task Stack)交互,主要用于优化页面跳转逻辑、避免重复创建实例、控制返回栈行为等。Android 提供了 4 种核心启动模式,可在AndroidManifest.xml中通过android:launchMode属性配置,也可通过Intent添加标志位动态指定。

1. standard(标准模式,默认)
  • 核心逻辑:每次启动 Activity 都会创建新的实例,不管任务栈中是否已有该 Activity 实例。
  • 任务栈行为:新实例会被压入当前任务栈的栈顶。
  • 适用场景:绝大多数普通页面(如首页的子页面、详情页),适合需要多次打开的场景。
  • 示例
    <activity android:name=".MainActivity" android:launchMode="standard" />
  • 特点
    • 每个实例都有独立的生命周期。
    • 按返回键时,栈顶实例依次出栈,直到栈空。
2. singleTop(栈顶复用模式)
  • 核心逻辑:如果要启动的 Activity 已经位于当前任务栈的栈顶,则复用该实例,不会创建新实例;若不在栈顶,则创建新实例。
  • 任务栈行为:复用实例时,系统会调用该 Activity 的onNewIntent(Intent intent)方法传递新的 Intent,不会走onCreate(),但会走onResume()
  • 适用场景:接收通知跳转的页面、搜索页面(避免连续点击通知创建多个相同页面)。
  • 示例
    <activity android:name=".SearchActivity" android:launchMode="singleTop" />
  • 关键注意点:仅检查栈顶,若 Activity 在栈中但不在栈顶,仍会创建新实例。
3. singleTask(栈内单例模式)
  • 核心逻辑:确保整个任务栈中只有一个该 Activity 实例。启动时系统会检查:
    1. 若任务栈中无该实例:创建新实例并压入栈。
    2. 若任务栈中有该实例:将该实例之上的所有 Activity 出栈,使该实例成为栈顶,并调用onNewIntent()
  • 任务栈行为:可通过android:taskAffinity指定所属任务栈(默认与应用包名一致)。
  • 适用场景:应用的主页面(如首页)、购物车页面(确保全局只有一个实例)。
  • 示例
    <activity android:name=".HomeActivity" android:launchMode="singleTask" />
  • 特点:会 “清理” 目标实例上方的所有页面,适合作为应用的核心页面。
4. singleInstance(全局单例模式)
  • 核心逻辑:整个系统中只有一个该 Activity 实例,且该实例独占一个独立的任务栈(整个系统唯一)。
  • 任务栈行为:其他应用 / 页面启动该 Activity 时,都会跳转到这个独立任务栈中的实例;返回时先回到原任务栈,再处理该独立栈。
  • 适用场景:系统级的页面(如来电界面、锁屏界面)、需要全局唯一且与其他页面隔离的功能(如微信的浮窗聊天页面)。
  • 示例
    <activity android:name=".SystemCallActivity" android:launchMode="singleInstance" />
  • 特点:隔离性最强,使用场景极少,避免滥用(会增加任务栈管理复杂度)。

补充:Intent 标志位(动态指定启动模式)

除了在 Manifest 中静态配置,还可通过 Intent 的标志位动态指定启动模式(优先级高于 Manifest 配置),常用标志位:

  • FLAG_ACTIVITY_NEW_TASK:对应 singleTask(需配合 taskAffinity)。
  • FLAG_ACTIVITY_SINGLE_TOP:对应 singleTop。
  • FLAG_ACTIVITY_CLEAR_TOP:配合 singleTask 使用,清除目标实例上方的所有 Activity。
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:Activity 不显示在最近任务列表。

示例代码(动态指定 singleTop):

Intent intent = new Intent(this, SearchActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);

总结

  1. standard:默认模式,每次新建实例,适合普通页面;
  2. singleTop:栈顶复用,避免栈顶重复创建,适合通知 / 搜索页面;
  3. singleTask:栈内单例,清理上方页面,适合应用核心页面(如首页);
  4. singleInstance:全局单例 + 独立栈,仅用于系统级 / 强隔离页面,极少使用。

核心原则:根据页面的 “复用需求” 和 “任务栈隔离需求” 选择启动模式,优先使用 standard/singleTop/singleTask,避免滥用 singleInstance。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 5:06:17

个性化定制:根据用户特征调整AI Agent

个性化定制:根据用户特征调整AI Agent 关键词:个性化定制、用户特征、AI Agent、特征分析、调整策略 摘要:本文围绕如何根据用户特征对AI Agent进行个性化定制展开深入探讨。首先介绍了相关背景知识,包括目的范围、预期读者等内容。接着阐述了核心概念与联系,给出了清晰的…

作者头像 李华
网站建设 2026/2/16 2:12:05

闲鱼商品详情API接口基础架构解析

闲鱼商品详情 API 接口&#xff0c;是面向开发者或合作方提供闲鱼平台商品详情数据的标准化接口&#xff0c;其架构设计围绕数据安全、权限管控、高并发支撑、数据标准化四大核心目标展开&#xff0c;整体遵循分层架构设计思路&#xff0c;同时适配闲鱼 C2C&#xff08;个人对个…

作者头像 李华
网站建设 2026/2/19 19:09:32

软件测试要学习的基础知识——白盒测试

白 盒 测 试白盒测试是通过检查软件内部的逻辑结构&#xff0c;对软件中的逻辑路径进行覆盖测试&#xff0c;以确定实际运行状态与预期状态是否一致。白盒测试又被称为&#xff1a;透明盒测试结构化测试逻辑驱动测试基于代码的测试白盒测试的常用技术分类一、静态分析&#xff…

作者头像 李华
网站建设 2026/2/20 17:43:23

教育创新篇:构建面向AI搜索时代的GEO人才培养新体系

引言&#xff1a;教育转型的紧迫性——当传统课程遭遇技术革命随着地理空间智能与AI搜索技术的深度融合&#xff0c;传统的地理信息科学&#xff08;GIS&#xff09;教育体系正面临着前所未有的挑战。据行业调查显示&#xff0c;超过60%的GIS专业毕业生在就业后需要额外投入6-1…

作者头像 李华
网站建设 2026/2/24 12:16:47

论文降重工具该如何选择?针对知网AIGC检测高AI率的终极指南

"## 在高校写论文的过程中&#xff0c;面对知网及其他AIGC检测平台对论文AI率的严格把控&#xff0c;许多同学感受到论文降重的巨大压力。本文基于真实体验分享&#xff0c;详细介绍论文降AI率的难题与解决方案&#xff0c;重点评测了两款优质降AI工具——【嘎嘎降AI】和…

作者头像 李华
网站建设 2026/2/20 11:00:44

网络安全从入门到精通:体系化梳理核心基础与技术原理脉络

什么是网络安全 采取必要措施&#xff0c;来防范对网络的攻击&#xff0c;侵入&#xff0c;干扰&#xff0c;破坏和非法使用&#xff0c;以及防范一些意外事故&#xff0c;使得网络处于稳定可靠运行的状态&#xff0c;保障网络数据的完整性、保密性、可用性的能力(CIA)。 举例…

作者头像 李华