本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
一、AbilityStage核心概述
AbilityStage是HarmonyOS中Module级别的组件管理器,作为应用组件的重要容器,承担着模块初始化和生命周期管理的核心职责。
1.1 基本特性
- 模块级别管理:每个Module对应一个AbilityStage实例
- 单例模式:一个Module有且仅有一个AbilityStage实例
- 初始化入口:HAP首次加载时创建AbilityStage实例
- 生命周期管理:提供完整的生命周期回调和事件处理机制
1.2 与Module的关系
Module → AbilityStage → UIAbility/ExtensionAbility组件
二、核心功能
2.1 模块初始化管理
AbilityStage在Module加载阶段执行关键初始化操作:
- 资源预加载:提前加载模块所需的资源文件
- 线程创建:初始化模块级别的后台线程
- 全局配置:设置模块的全局参数和配置信息
- 服务注册:注册模块提供的服务和能力
2.2 生命周期回调
2.2.1 onCreate()
- 触发时机:Module第一个组件实例创建之前
- 执行顺序:AbilityStage创建完成后立即执行
- 示例:
// 模块初始化示例
onCreate() {
// 预加载资源
this.preloadResources();
// 初始化全局线程池
this.initThreadPool();
// 注册模块服务
this.registerModuleServices();
// 设置全局配置
this.applyGlobalConfigurations();
}
2.2.2 onDestroy()
- 触发时机:Module卸载或应用终止时
- 主要用途:资源释放和清理工作
- 注意事项:确保所有资源正确释放,避免内存泄漏
2.3 事件回调处理
2.3.1 onAcceptWant()
- 专用场景:specified启动模式专属回调
- 核心功能:处理指定实例模式的启动请求
- 返回值:返回标识UIAbility实例的唯一Key值
- 示例:
onAcceptWant(wantInfo): string {
// 从wantInfo中提取实例标识
const instanceKey = wantInfo.parameters?.documentId;
// 返回实例标识符,用于匹配现有实例
return instanceKey || `default_${Date.now()}`;
}
2.3.2 onConfigurationUpdate()
- 触发条件:系统环境配置发生变化时
- 监听变化:
- 系统语言切换
- 深色/浅色模式变化
- 屏幕方向改变
- 字体大小调整
- 区域设置变更
- 处理逻辑:
onConfigurationUpdate(newConfig) {
// 处理语言变化
if (newConfig.language !== this.currentConfig.language) {
this.handleLanguageChange(newConfig.language);
}
// 处理主题变化
if (newConfig.colorMode !== this.currentConfig.colorMode) {
this.handleThemeChange(newConfig.colorMode);
}
// 更新当前配置
this.currentConfig = newConfig;
}
2.3.3 onMemoryLevel()
- 触发条件:系统内存状态发生变化时
- 监控级别:不同等级的内存压力状态
- 处理示例:
onMemoryLevel(level) {
switch (level) {
case MemoryLevel.LOW:
this.releaseNonCriticalResources();
break;
case MemoryLevel.CRITICAL:
this.releaseAllCache();
this.cleanupTemporaryFiles();
break;
case MemoryLevel.NORMAL:
this.resumeNormalOperations();
break;
}
}
2.3.4 onNewProcessRequest()
- 触发条件:需要创建新进程时
- 管理范围:多进程应用的进程管理
- 使用场景:大型应用的进程隔离和资源分配
2.3.5 onPrepareTermination()
- 触发条件:应用即将被终止时
- 主要职责:优雅终止和数据保存
- 处理示例:
onPrepareTermination() {
// 保存用户数据
this.saveUserData();
// 清理临时文件
this.cleanupTemporaryFiles();
// 释放系统资源
this.releaseSystemResources();
// 返回是否允许终止
return true;
}
三、AbilityStage与组件关系
3.1 与UIAbility的关系
- 管理职责:AbilityStage管理Module内所有UIAbility组件
- 生命周期协调:在UIAbility创建前完成模块初始化
- 资源配置:为UIAbility提供共享的模块级资源
3.2 与ExtensionAbility的关系
- 扩展能力管理:统一管理各种扩展能力组件
- 服务注册:处理ExtensionAbility的服务注册和发现
- 资源共享:提供ExtensionAbility之间的资源共享机制
四、配置与使用
4.1 配置文件设置
// module.json5配置示例
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "AbilityStage",
"deviceTypes": [
"default",
"tablet"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "MainAbility",
"srcEntry": "./ets/mainability/MainAbility.ts",
"description": "$string:mainability_description",
"icon": "$media:icon",
"label": "$string:mainability_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:startWindowBackground",
"exported": true,
"skills": [
{
"actions": [
"action.system.home"
],
"entities": [
"entity.system.home"
]
}
]
}
]
}
}
4.2 自定义AbilityStage实现
import AbilityStage from '@ohos.app.ability.AbilityStage';
import Logger from '../utils/Logger';
export default class CustomAbilityStage extends AbilityStage {
private moduleTag: string = 'CustomModule';
private currentConfig: any;
private resourceManager: ResourceManager;
// 模块创建生命周期回调
onCreate(): void {
Logger.info(`${this.moduleTag} onCreate called`);
// 执行模块初始化操作
this.initializeModule();
// 监听系统配置变化
this.subscribeToConfigChanges();
}
// 模块销毁生命周期回调
onDestroy(): void {
Logger.info(`${this.moduleTag} onDestroy called`);
// 执行清理操作
this.cleanupResources();
// 取消配置变化监听
this.unsubscribeFromConfigChanges();
}
// 指定实例模式回调
onAcceptWant(wantInfo): string {
Logger.info(`${this.moduleTag} onAcceptWant called`);
// 处理文档ID或其他业务标识
const documentId = wantInfo.parameters?.documentId;
if (documentId) {
return `document_${documentId}`;
}
// 生成默认实例标识
return `instance_${Date.now()}`;
}
// 系统配置更新回调
onConfigurationUpdate(newConfig): void {
Logger.info(`${this.moduleTag} onConfigurationUpdate called`);
// 处理语言配置变化
if (newConfig.language !== this.currentConfig?.language) {
this.handleLanguageChange(newConfig.language);
}
// 处理颜色模式变化
if (newConfig.colorMode !== this.currentConfig?.colorMode) {
this.handleColorModeChange(newConfig.colorMode);
}
// 更新当前配置
this.currentConfig = { ...newConfig };
}
// 内存级别变化回调
onMemoryLevel(level): void {
Logger.info(`${this.moduleTag} onMemoryLevel: ${level}`);
switch (level) {
case 0: // NORMAL
this.handleNormalMemory();
break;
case 1: // LOW
this.handleLowMemory();
break;
case 2: // CRITICAL
this.handleCriticalMemory();
break;
}
}
// 模块初始化方法
private initializeModule(): void {
Logger.info(`${this.moduleTag} Initializing module`);
// 初始化资源管理器
this.resourceManager = this.context.resourceManager;
// 预加载关键资源
this.preloadCriticalResources();
// 初始化全局服务
this.initializeGlobalServices();
}
// 资源清理方法
private cleanupResources(): void {
Logger.info(`${this.moduleTag} Cleaning up resources`);
// 释放资源引用
this.resourceManager = undefined;
// 清理缓存数据
this.clearCaches();
}
// 具体处理方法的实现
private handleLanguageChange(newLanguage: string): void {
Logger.info(`Language changed to: ${newLanguage}`);
// 实现语言切换逻辑
}
private handleColorModeChange(colorMode: number): void {
Logger.info(`Color mode changed to: ${colorMode}`);
// 实现主题切换逻辑
}
private handleNormalMemory(): void {
// 正常内存状态处理
}
private handleLowMemory(): void {
// 低内存状态处理:释放非关键资源
this.releaseNonCriticalResources();
}
private handleCriticalMemory(): void {
// 严重内存状态处理:释放所有可能资源
this.releaseAllPossibleResources();
}
}
五、总结
5.1 核心价值
- 统一管理:集中管理Module级别的初始化和资源配置
- 性能优化:通过预加载和懒加载策略优化启动性能
- 资源高效利用:智能的内存和资源管理机制
- 用户体验提升:无缝的主题、语言等系统配置切换
5.2 建议
- 合理分工:在AbilityStage中处理模块级事务,组件中处理组件级事务
- 错误处理:实现完善的错误处理和恢复机制
- 性能监控:监控关键生命周期方法的执行性能
5.3 适用场景
- 需要模块级别初始化和配置的应用
- 支持多语言、多主题的应用
- 需要精细内存管理的应用
- 使用specified启动模式的复杂应用

被折叠的 条评论
为什么被折叠?



