Harmony Stage模型 生命周期

image.png

📱 多平台生命周期对比学习指南

适合 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的结合体,既管理应用生命周期,也管理页面生命周期。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容