当前位置:首页>鸿蒙APP>一读就懂 - Flutter鸿蒙页面的生命周期解读Part1

一读就懂 - Flutter鸿蒙页面的生命周期解读Part1

  • 2026-10-18 22:36:21
一读就懂 - Flutter鸿蒙页面的生命周期解读Part1

这篇文章专门讲独立 Flutter 应用在鸿蒙上的生命周期-从 FlutterAbility 启动到销毁,每个回调什么时候触发、框架帮你干了什么、你该在哪里做什么...如果你用的是 Add-to-App,可以期待下次的讲解-Part2

什么是独立 Flutter 应用?

你通过 flutter create 生成出来的标准工程就是独立 Flutter 应用:整个 App 就是一个 Flutter,不存在"一部分原生、一部分 Flutter"的混合结构。

应用入口长这样:

export default classEntryAbilityextendsFlutterAbility{  // 你的代码}

FlutterAbility 继承自鸿蒙原生的 UIAbility,也就是说,它走的还是标准 UIAbility 生命周期,区别在于,FlutterAbility 在标准回调里塞进了 Flutter 引擎的创建、渲染控制和销毁逻辑,你不需要手动管理引擎,大多数情况下只需要关心业务层的事就可以了

完整的生命周期

你可以结合UIAbility组件生命周期加深理解

逐一拆解每个回调

先上代码

import { AbilityConstant, Want } from '@kit.AbilityKit';import { FlutterAbility, FlutterEngine } from '@ohos/flutter_ohos';...export default class EntryAbility extends FlutterAbility {  ...  // ——— 生命周期回调 ———  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {    super.onCreate(want, launchParam)    // 执行一次性启动逻辑  }  onForeground(): void {    super.onForeground()    // 恢复  }  onBackground(): void {    super.onBackground()    // 停止  }  onWindowStageDestroy(): void {    super.onWindowStageDestroy()    // 注销  }  onDestroy(): void {    // 保存数据、释放资源、关闭连接 — 在 super 之前    super.onDestroy()  // 最后销毁引擎  }}

触发时机onCreate() — 仅一次

Ability 实例首次创建时触发,整个 App 生命周期里只会走一次。

框架在这里完成了 FlutterManager 注册,FlutterManager 是个全局管理器,负责跟踪当前活跃的 Ability 和 WindowStage,后面的引擎创建、插件上下文解析都依赖它。

触发时机onWindowStageCreate()

UICability 实例创建完成后、进入前台之前触发,系统传进个 window.WindowStage 对象,同时框架在这里做了两件关键的事:

  • 创建 FlutterView
  • 加载首页

触发时机onForeground() — UI 可见之前

App 从后台切到前台时触发,时机在 UI 变为可见之前,框架恢复了 Flutter 引擎渲染,也就是之前在 onBackground 里暂停的渲染管线被拉起来了。

你在这里应该做的事:

  • 恢复 onBackground 里停掉的资源
  • 重新连接网络长连接、WebSocket
  • 刷新可能过期的数据缓存

触发时机onBackground() — UI 完全不可见之后

App 切到后台、UI 完全不可见之后触发,框架暂停了 Flutter 引擎渲染。

onBackground() 执行时间很短:系统不会给你太多时间,那些耗时操作得扔到子线程或者异步去处理

触发时机onWindowStageDestroy()

UIAbility 实例销毁前触发。框架在这里注销 WindowStage、释放窗口相关资源。

触发时 WindowStage 已经被销毁了。注意——这个回调里不能再使用 WindowStage 对象,它已经不可用了。你在这里释放的是"通过 WindowStage 获取的自定义资源"——比如在 onWindowStageCreate 里注册的 windowStageEvent 回调。

关键onDestroy() — 最后一个回调

UIAbility 生命周期里收到的最后一个回调,框架在这里销毁 Flutter 引擎和 FlutterView。

onDestroy:需要先完成你的清理,最后调 super.onDestroy()原因是super.onDestroy() 里会销毁引擎:如果你先调了 super,引擎没了,后面你想保存插件状态、写文件、关闭数据库连接都来不及。所以逻辑一定是先完成你的收尾工作,最后让框架销毁引擎...

感兴趣的小伙伴记得关注我,关注社区动态!

https://gitcode.com/CPF-Flutter

“AI再牛,技术不能丢”

最新文章

随机文章