📱 多平台生命周期对比学习指南
适合 iOS/Flutter/Android 开发者快速理解鸿蒙生命周期
一、应用生命周期对比
| 场景 |
iOS (AppDelegate) |
Flutter |
Android (Application) |
鸿蒙 (UIAbility) |
| 应用启动 |
didFinishLaunching |
- |
onCreate |
onCreate |
| 进入前台 |
willEnterForeground |
resumed |
- |
onForeground |
| 进入后台 |
didEnterBackground |
paused |
- |
onBackground |
| 应用销毁 |
willTerminate |
detached |
onTerminate |
onDestroy |
二、页面/界面生命周期对比
| 场景 |
iOS (ViewController) |
Flutter (Widget) |
Android (Activity) |
鸿蒙 (UIAbility) |
| 创建 |
viewDidLoad |
initState |
onCreate |
onCreate |
| 即将显示 |
viewWillAppear |
- |
onStart |
onWindowStageCreate |
| 已显示/可交互 |
viewDidAppear |
resumed |
onResume |
onForeground |
| 即将隐藏 |
viewWillDisappear |
inactive |
onPause |
onBackground |
| 已隐藏 |
viewDidDisappear |
paused |
onStop |
onWindowStageDestroy |
| 销毁 |
dealloc |
dispose |
onDestroy |
onDestroy |
三、生命周期流程对比
iOS ViewController 流程
启动: viewDidLoad → viewWillAppear → viewDidAppear
退到后台: viewWillDisappear → viewDidDisappear
销毁: dealloc
Flutter Widget 流程
启动: initState → build → resumed
退到后台: inactive → paused
销毁: dispose
Android Activity 流程
启动: onCreate → onStart → onResume
退到后台: onPause → onStop
销毁: onDestroy
鸿蒙 UIAbility 流程
启动: onCreate → onWindowStageCreate → onForeground
退到后台: onBackground
销毁: onWindowStageDestroy → onDestroy
四、核心概念类比
| 概念 |
iOS |
Flutter |
Android |
鸿蒙 |
| 应用入口 |
AppDelegate |
main() |
Application |
UIAbility |
| 页面容器 |
ViewController |
Widget |
Activity |
UIAbility + Page |
| 视图 |
UIView |
Widget |
View |
Component |
| 上下文 |
UIApplication |
BuildContext |
Context |
UIAbilityContext |
| 资源文件 |
.xcassets |
assets/ |
res/ |
resources/ |
| 配置文件 |
Info.plist |
pubspec.yaml |
AndroidManifest.xml |
module.json5 |
五、记忆技巧
鸿蒙 vs iOS 对照记忆
鸿蒙 onCreate ≈ iOS didFinishLaunching + viewDidLoad
鸿蒙 onWindowStageCreate ≈ iOS viewWillAppear (准备显示UI)
鸿蒙 onForeground ≈ iOS viewDidAppear (已可见,可交互)
鸿蒙 onBackground ≈ iOS viewWillDisappear (即将不可见)
鸿蒙 onWindowStageDestroy ≈ iOS viewDidDisappear (UI已销毁)
鸿蒙 onDestroy ≈ iOS dealloc (释放所有资源)
鸿蒙 vs Flutter 对照记忆
鸿蒙 onCreate ≈ Flutter initState (初始化)
鸿蒙 onWindowStageCreate ≈ Flutter build (构建UI)
鸿蒙 onForeground ≈ Flutter resumed (前台可见)
鸿蒙 onBackground ≈ Flutter paused (后台暂停)
鸿蒙 onDestroy ≈ Flutter dispose (销毁)
鸿蒙 vs Android 对照记忆
鸿蒙 onCreate ≈ Android onCreate
鸿蒙 onWindowStageCreate ≈ Android onStart
鸿蒙 onForeground ≈ Android onResume
鸿蒙 onBackground ≈ Android onPause + onStop
鸿蒙 onWindowStageDestroy ≈ Android onStop
鸿蒙 onDestroy ≈ Android onDestroy
六、代码对比示例
iOS 写法
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 初始化
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 已显示
}
}
Flutter 写法
class MyWidget extends StatefulWidget {
@override
void initState() {
super.initState();
// 初始化
}
@override
void dispose() {
// 销毁
super.dispose();
}
}
Android 写法
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 初始化
}
override fun onResume() {
super.onResume()
// 已显示
}
}
鸿蒙写法
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: LaunchParam): void {
// 初始化
}
onForeground(): void {
// 已显示
}
}
七、关键区别
| 特点 |
说明 |
| 鸿蒙独特之处 |
onWindowStageCreate 单独管理窗口创建,iOS/Android没有这个概念 |
| 鸿蒙优势 |
一个UIAbility可以管理多个WindowStage(多窗口支持) |
| 配置变化 |
鸿蒙用 onConfigurationUpdate 统一处理,Android需要重写多个方法 |
八、生命周期回调详解
onCreate
-
触发时机: Ability创建时
-
作用: 初始化应用资源
-
类比: iOS的
didFinishLaunching + viewDidLoad
-
典型操作: 初始化数据库、全局配置、第三方SDK
onWindowStageCreate
-
触发时机: 窗口阶段创建时(在onCreate之后)
-
作用: 设置UI内容,加载页面
-
类比: iOS的
viewWillAppear
-
典型操作:
windowStage.loadContent('pages/Index')
onForeground
-
触发时机: Ability进入前台,应用可见
-
作用: 恢复暂停的操作
-
类比: iOS的
viewDidAppear / Flutter的 resumed
-
典型操作: 恢复动画、刷新数据、重新连接网络
onBackground
-
触发时机: Ability进入后台,应用不可见
-
作用: 暂停耗电操作
-
类比: iOS的
viewWillDisappear / Flutter的 paused
-
典型操作: 暂停动画、保存状态、断开连接
onWindowStageDestroy
-
触发时机: 窗口阶段销毁时
-
作用: 释放UI相关资源
-
类比: iOS的
viewDidDisappear
-
典型操作: 释放图片资源、取消UI相关任务
onDestroy
-
触发时机: Ability销毁时
-
作用: 释放所有资源
-
类比: iOS的
dealloc / Flutter的 dispose
-
典型操作: 释放所有资源、关闭数据库连接
onConfigurationUpdate
-
触发时机: 系统配置变化时
-
作用: 响应配置变化
-
类比: Android的
onConfigurationChanged
-
典型场景: 屏幕旋转、语言切换、深色模式切换
九、常见场景处理
场景1: 应用启动
鸿蒙: onCreate → onWindowStageCreate → onForeground
iOS: didFinishLaunching → viewDidLoad → viewWillAppear → viewDidAppear
Android: onCreate → onStart → onResume
Flutter: initState → build → resumed
场景2: 按Home键退到后台
鸿蒙: onBackground
iOS: viewWillDisappear → viewDidDisappear → didEnterBackground
Android: onPause → onStop
Flutter: inactive → paused
场景3: 从后台恢复
鸿蒙: onForeground
iOS: willEnterForeground → viewWillAppear → viewDidAppear
Android: onRestart → onStart → onResume
Flutter: resumed
场景4: 关闭应用
鸿蒙: onBackground → onWindowStageDestroy → onDestroy
iOS: viewWillDisappear → viewDidDisappear → willTerminate
Android: onPause → onStop → onDestroy
Flutter: paused → inactive → detached
十、最佳实践
✅ 推荐做法
| 生命周期 |
推荐操作 |
| onCreate |
初始化全局资源、数据库、SDK |
| onWindowStageCreate |
加载页面、设置窗口属性 |
| onForeground |
刷新数据、恢复动画、重连网络 |
| onBackground |
保存状态、暂停动画、释放临时资源 |
| onWindowStageDestroy |
释放UI资源、取消UI任务 |
| onDestroy |
释放所有资源、关闭连接 |
❌ 避免的做法
| 生命周期 |
避免操作 |
| onCreate |
耗时操作(应异步处理) |
| onForeground |
大量计算(会卡顿) |
| onBackground |
长时间操作(影响切换速度) |
| onDestroy |
忘记释放资源(内存泄漏) |
十一、快速记忆口诀
创建窗口前台见,
后台销毁依次现。
配置变化单独调,
资源释放记心间。
onCreate → 初始化
onWindowStageCreate → 加载UI
onForeground → 可见了
onBackground → 藏后台
onDestroy → 释放了
📌 提示: 鸿蒙的UIAbility = iOS的ViewController + AppDelegate的结合体,既管理应用生命周期,也管理页面生命周期。