Activity是Android四大组件之一,作为用户介乎的界面载体,承担着展示UI、处理用户输入、管理页面生命周期的核心职责,是理解Android应用架构的基础。
一、简介
Activity是Android系统中用于与用户交互的组件,一个Activity通常对应应用中的一个独立屏幕,也可以理解为一个界面,如登录页、主页、设置页等。但是它不等于界面本身,而是在界面背后复杂加载布局、处理交互、管理状态、协调Fragment/Compose等内容的"控制器"。
Activity由系统统一调度,其生命周期完全受系统回调控制,开发者通过覆写回调方法来响应不同阶段的事件。
一个应用可以有多个Activity,应用通过AndroidManifest.xml声明Activity,并在主Activity上配置<action android:name="android.intent.action.Main"/> 与<category android:name="android.intent.category.LAUNCHER" />,才能在桌面显示图标并启动应用。
通常在创建一个应用是会自动生成配置代码。
二、生命周期
Activity有七大生命周期,定义了七个核心回调方法,每个方法对应生命周期的特定阶段。
理解生命周期是非常重要的,这奠定了开发基础。
2.1 七大生命周期回调
| 回调方法 | 调用时机 | 典型职责 |
|---|---|---|
| onCreate() | Activity 第一次被创建 | 加载布局、绑定视图、初始化 ViewModel、恢复 savedInstanceState |
| onStart() | Activity 由不可见变为可见 | 注册 UI 相关监听 |
| onResume() | Activity 位于栈顶、可与用户交互 | 启动相机、传感器、动画等前台资源 |
| onPause() | Activity 失去焦点,部分可见 | 暂停动画、保存关键数据,必须快速执行 |
| onStop() | Activity 完全不可见 | 释放重量级资源(如 GPS、广播) |
| onRestart() | Activity 由停止态重新回到前台 | 一般无需处理,系统随后回调 onStart |
| onDestroy() | Activity 被销毁前调用 | 最终清理、解除所有绑定 |
生命周期流程图如下:

2.2 三种生存周期划分
为了便于理解与资源管理,生命周期可以划分为三个同心区间。
- 完整生存期:onCreate()->onDestroy()之间,通常在onCreate完成初始化,在onDestroy()释放全部资源。
- 可见生存期:onStart()->onStop()之间,Activity对用户可见,但不一定可交互,适合管理UI相关资源。
- 前台生存期:onResume()->onPause()之间,Activity处于前台且与用户可交互,是应用真正"活跃"的阶段。
2.3典型场景的回调顺序
| 场景 | 回调顺序 |
|---|---|
| 正常启动 | onCreate → onStart → onResume |
| 正常退出 | onPause → onStop → onDestroy |
| 打开新 Activity | 旧:onPause → onStop;新:onCreate → onStart → onResume |
| 返回到上一页 | 新:onPause → onStop → onDestroy;旧:onRestart → onStart → onResume |
| 按 Home 键回桌面 | onPause → onStop |
| 回到应用 | onRestart → onStart → onResume |
| 弹出对话框式 Activity | 仅触发 onPause,不触发 onStop |
| 屏幕旋转 | onPause → onStop → onSaveInstanceState → onDestroy → onCreate → onStart → onRestoreInstanceState → onResume |
三、启动模式
Activity的启动模式决定了它在任务栈中如何创建与复用实例,Activity有四种启动模式,通过AndroidManifest.xml中<activity>的android:launchMode属性指定。
| 启动模式 | 实例数 | 核心行为 | 典型应用场景 |
|---|---|---|---|
| standard | 多个 | 默认模式,每次启动都在目标栈顶创建新实例 | 大部分常规页面 |
| singleTop | 条件性多个 | 若目标 Activity 已位于栈顶则复用并回调 onNewIntent(),否则仍新建 | 推送详情页、登录页、支付回调页 |
| singleTask | 单例 | 整个任务栈中仅存在一个实例,启动时销毁其上所有 Activity 并回调 onNewIntent() | 首页、主页容器、WebView、购物车 |
| singleInstance | 单例(独占任务栈) | 系统为其单独创建一个任务栈,该栈内仅有它自身,跨应用共享实例 | 来电界面、系统 Launcher、闹钟提示 |
singleTask与singleInstance的唯一区别在于:singleTask允许其他Activity压入同一任务栈,而singleInstance的任务栈中永远只有它自己,从它启动的新Activity都会被放入其他任务栈。
四、其他遇到过的小问题
- 为什么不能在onPause中做耗时操作?
新Activity的onResume必须等到旧Activity的onPause执行完毕后才会触发,onPause耗时会直接影响页面切换的速度。 - 什么情况下Activity会走onDestory但应用未退出?
配置变更(旋转屏幕,切换语言、深色模式)、系统内存回收、finish()调用等都会触发onDestroy。 - 通知栏点击打开Activity会出现页面重复是什么原因?
通常是因为PendingIntent未设置FLAG或启动模式,导致任务栈错乱。应结合FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP 与 launchMode 综合设计,而非仅靠 singleTop 解决。
五、总结
Activity是Android组件体系的基石,其核心逻辑可归纳为三点:
- 生命周期由系统回调驱动,开发者通过覆写回调达到目的;
- 启动模式与Task/Back Stack决定了页面如何入栈、复用与销毁,是解决页面跳转与返回错乱的关键;
- Bundle机制与ViewModel组合保障了状态在销毁重建时不丢失。
感谢看完全文,比心!