鸿蒙原生开发手记:徒步迹 - 应用生命周期与AbilityStage
鸿蒙原生开发手记徒步迹 - 应用生命周期与AbilityStage掌握应用级生命周期构建稳健的鸿蒙应用一、前言应用生命周期管理是保证 App 稳定运行的基础。在鸿蒙 Stage 模型中除了每个 Ability 的生命周期还提供了 AbilityStage 来管理应用级生命周期事件。本文将详细介绍鸿蒙应用的生命周期体系包括 AbilityStage、应用状态保存与恢复、内存管理等关键话题。二、AbilityStage 详解AbilityStage 是 Stage 模型中的应用级生命周期入口类似于 Android 的 Application。2.1 创建 AbilityStage// MyAbilityStage.etsimport{AbilityStage,Want}fromkit.AbilityKit;exportdefaultclassMyAbilityStageextendsAbilityStage{// 应用创建时调用首次启动onCreate():void{console.info([徒步迹] AbilityStage onCreate);// 初始化全局配置this.initGlobalConfig();// 初始化日志系统Logger.init();// 初始化崩溃收集CrashCollector.init();// 预加载数据this.preloadData();}// 多实例模式下指定实例标识onAcceptWant(want:Want):string{// 根据 Want 参数返回实例 keyif(want.parameters){consttypewant.parameters[instanceType]asstring;if(typetracking){returntracking_${Date.now()};}if(typeroute){constrouteIdwant.parameters[routeId]asnumber;returnroute_${routeId};}}returndefault_${Date.now()};}// 配置文件中声明// module.json5 中配置 srcEntry 指向此文件// srcEntry: ./ets/myabilitystage/MyAbilityStage.etsprivateinitGlobalConfig():void{// 初始化全局存储if(!AppStorage.get(initialized)){AppStorage.setOrCreate(initialized,true);AppStorage.setOrCreate(appVersion,1.0.0);AppStorage.setOrCreate(stepGoal,10000);AppStorage.setOrCreate(themeMode,light);}}privatepreloadData():void{// 预加载必要配置// 例如从 Preferences 读取用户设置console.info([徒步迹] 预加载完成);}}2.2 配置 module.json5{ module: { name: entry, type: entry, srcEntry: ./ets/myabilitystage/MyAbilityStage.ets, abilities: [ { name: EntryAbility, srcEntry: ./ets/entryability/EntryAbility.ets } ] } }三、应用生命周期完整流程3.1 启动流程用户点击图标 ↓ 系统创建 Application Process ↓ AbilityStage.onCreate() ← 应用级初始化 ↓ UIAbility.onCreate() ← 页面级初始化 ↓ UIAbility.onWindowStageCreate() ← 加载页面 ↓ UIAbility.onForeground() ← 用户可见 ↓ 页面 aboutToAppear() ← 页面准备显示 ↓ 应用正常启动完成 ✅3.2 后台运行流程用户按 Home 键 / 切换到其他 App ↓ UIAbility.onBackground() ← 进入后台 ↓ 页面 aboutToDisappear() ← 页面隐藏 ↓ 系统可能保留或回收进程3.3 回到前台流程用户从最近任务切回 App ↓ UIAbility.onForeground() ← 回到前台 ↓ 页面 aboutToAppear() ← 重新显示3.4 销毁流程用户划掉 App / 系统回收 ↓ UIAbility.onWindowStageDestroy() ↓ UIAbility.onDestroy() ← Ability 销毁 ↓ AbilityStage.onDestroy() ← 应用销毁进程结束四、应用状态保存与恢复4.1 保存状态在 onBackground 中保存关键状态exportdefaultclassEntryAbilityextendsUIAbility{onBackground():void{console.info([徒步迹] 进入后台保存状态);// 保存页面状态letstepCountAppStorage.getnumber(stepCount);letdistanceAppStorage.getnumber(todayDistance);// 保存到持久化存储letpreferencesthis.context.preferences;preferences.put(stepCount,stepCount??0);preferences.put(todayDistance,distance??0);preferences.flush();}}4.2 恢复状态在 onCreate 或 onForeground 中恢复exportdefaultclassEntryAbilityextendsUIAbility{asynconForeground():Promisevoid{console.info([徒步迹] 回到前台恢复状态);// 从持久化存储恢复letpreferencesthis.context.preferences;letsavedStepsawaitpreferences.get(stepCount,0);letsavedDistanceawaitpreferences.get(todayDistance,0);AppStorage.setOrCreate(stepCount,savedSteps);AppStorage.setOrCreate(todayDistance,savedDistance);}}4.3 配置异常恢复// module.json5 配置恢复策略 { abilities: [ { name: EntryAbility, launchType: singleton, recovery: { enabled: true, // 启用异常恢复 maxRecoveryCount: 3, // 最大恢复次数 } } ] }五、页面生命周期除了 Ability 生命周期每个页面也有自己的生命周期EntryComponentstruct HomePage{// 页面即将显示aboutToAppear():void{console.info([徒步迹] HomePage aboutToAppear);// 加载数据、初始化状态this.loadTodayData();}// 页面即将消失aboutToDisappear():void{console.info([徒步迹] HomePage aboutToDisappear);// 释放资源、保存临时状态}// 页面尺寸变化如折叠屏展开onPageHide():void{console.info([徒步迹] HomePage onPageHide);}// 页面重新显示onPageShow():void{console.info([徒步迹] HomePage onPageShow);// 刷新数据this.refreshData();}// 返回键处理onBackPress():boolean{console.info([徒步迹] HomePage onBackPress);// 返回 true 表示拦截返回事件returnfalse;}build(){// ...}}六、内存与进程管理6.1 内存警告应用可以监听系统内存警告及时释放资源exportdefaultclassEntryAbilityextendsUIAbility{// 系统内存不足时调用onMemoryLevel(level:number):void{if(levelMemoryLevel.MEMORY_LEVEL_MODERATE){// 中等内存压力释放缓存ImageCache.clear();}elseif(levelMemoryLevel.MEMORY_LEVEL_CRITICAL){// 严重内存压力释放所有非必要资源this.releaseAllResources();}}privatereleaseAllResources():void{AppStorage.delete(cachedRoutes);AppStorage.delete(cachedPhotos);}}6.2 配置进程优先级// module.json5 { module: { name: entry, process: com.hiking.tuji, keepAlive: true // 后台定位场景需保持活跃 } }七、实践建议7.1 初始化顺序exportdefaultclassMyAbilityStageextendsAbilityStage{onCreate():void{// 第1步日志系统Logger.init();// 第2步崩溃收集CrashCollector.init();// 第3步全局配置ConfigManager.init();// 第4步数据库DatabaseManager.init();// 第5步用户信息UserManager.init();}}7.2 资源释放检查清单□ 取消网络请求 □ 停止定时器 □ 释放图片缓存 □ 关闭数据库连接 □ 停止位置监听 □ 注销事件监听八、总结应用生命周期管理是 App 稳定性的基础。通过 AbilityStage 进行应用级初始化通过 UIAbility 生命周期管理页面状态通过页面生命周期控制 UI 行为形成了一个完整的生命周期管理体系。第一阶段项目搭建与语言基础到此全部完成。从下一篇文章开始我们将正式进入徒步迹核心页面的实战开发。下一篇预告鸿蒙原生开发手记徒步迹 - 启动页(Splash)设计与实现