鸿蒙应用的入口
在鸿蒙应用开发中,APP的入口点与C程序的main函数类似,是整个应用启动时系统首先调用的位置。当用户启动应用时,系统会自动创建并调用EntryAbility的onCreate方法。应用的生命周期从这里开始。该方法只执行一次。之后,应用会根据需要跳转到其他Ability或UI页面(如通过router模块)。它的作用包含初始化全局数据:例如,在onCreate中创建Preferences实例(用于本地存储)并存入globalThis,供整个应用共享。设置应用配置:如注册服务、处理权限请求或决定初始跳转逻辑(例如,根据缓存数据决定是否直接进入主页面)。示例场景:在onCreate中加载用户偏好设置。如果读取成功,直接显示主页;否则,用router.replaceUrl跳转到登录页,并禁用返回手势(通过重写onBackPress方法返回true实现)。
虽然EntryAbility是应用级入口,但UI的入口通常由@Entry装饰器指定(在ArkUI中)。例如,在EntryAbility的onCreate中,你可以通过windowStage.loadContent加载一个用@Entry标记的UI组件(如Index页面)。这类似于:EntryAbility负责底层初始化。@Entry组件(如一个Page)负责渲染首个界面。在MVVM模式中,EntryAbility初始化ViewModel或Model层数据,然后传递给UI组件实现数据绑定。EntryAbility文件通常位于entry/src/main/ets/entryability/EntryAbility.ets目录下。在onCreate中避免耗时操作(如网络请求),以防卡顿。建议在UI页面的aboutToAppear生命周期中处理数据加载。使用HarmonyOS Kits导入相关模块,例如:import Ability from '@kit.AbilityKit'(确保导入语句符合最新规范)。错误排查:如果应用启动失败,检查EntryAbility是否正确定义,并确认onCreate中没有未处理的异常。
DevEco自动生成的EntryAbility实现
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
try {
// 设置颜色模式为系统默认
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} catch (err) {
hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(err));
}
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
setColorMode(COLOR_MODE_NOT_SET):显式声明不指定颜色模式(深色/浅色),由系统自动适配(HarmonyOS 5.0+推荐做法)、错误处理强化:通过try-catch捕获设置异常,避免初始化失败导致崩溃、日志规范化:使用hilog替代console,符合系统级日志规范
onWindowStageCreate(windowStage: window.WindowStage): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) { // ✅ 正确判断方式
hilog.error(DOMAIN, 'testTag', 'Failed to load content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading content.');
});
}
主窗口创建后加载UI页面:错误判断逻辑:if (err.code)是官方推荐写法(替代if(err)),因HarmonyOS错误对象始终包含code属性。异步回调标准化**:loadContent()使用回调函数处理结果,避免阻塞主线程。**路径规范:pages/Index对应pages目录下的ArkTS组件(工程结构强制约束)

优先使用hilog:符合鸿蒙日志规范,支持隐私标识(%{public}/%{private})和日志级别控制 。查看日志,在IDE中打开 HiLog窗口 → 点击左上角 New
| 特性 | onCreate | onWindowStageCreate |
|---|---|---|
| 触发时机 | UIAbility 实例创建完成时触发 | UIAbility 创建后,首次进入前台前触发 |
| 核心职责 | 初始化全局资源、获取上下文 | 创建窗口实例、加载UI界面 |
| 操作对象 | 无法操作窗口(WindowStage 尚未创建) | 可操作 WindowStage 窗口实例 |
| 典型操作 | 定义变量、获取 this.context |
调用 loadContent() 加载页面 |
| 必要性 | 非必须(可空实现) | 必须(否则白屏) |
onCreate(创建阶段) 初始化非UI相关资源(如数据库连接)解析启动参数(want 对象)
onWindowStageCreate(窗口创建阶段) 订阅窗口事件(如前后台切换、焦点变化)配置窗口属性(全屏/分屏模式)
onCreate 完成数据层初始化 → onWindowStageCreate 基于数据构建UI层 → onForeground 将UI呈现给用户
将数据初始化放在 onCreate,UI构建与事件绑定放在 onWindowStageCreate,两者协同完成应用启动流程。
- 点赞
- 收藏
- 关注作者
评论(0)