鸿蒙应用的入口

举报
黄生 发表于 2025/12/28 19:13:33 2025/12/28
【摘要】 在鸿蒙应用开发中,APP的入口点与C程序的main函数类似,是整个应用启动时系统首先调用的位置。当用户启动应用时,系统会自动创建并调用EntryAbility的onCreate方法。应用的生命周期从这里开始。该方法只执行一次。之后,应用会根据需要跳转到其他Ability或UI页面(如通过router模块)。它的作用包含初始化全局数据:例如,在onCreate中创建Preferences实例(...

在鸿蒙应用开发中,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
onForeground

onCreate 完成数据层初始化 → onWindowStageCreate 基于数据构建UI层onForeground 将UI呈现给用户

数据初始化放在 onCreateUI构建与事件绑定放在 onWindowStageCreate,两者协同完成应用启动流程。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。