杨利杰YJlio博客头图

HarmonyOS 7.0学习笔记03

前言:启动入口、窗口和页面要分开看

大家好,我是杨利杰 YJlio。

上一篇找到了 EntryAbility.ets,这篇继续沿着模板阅读应用入口。我想弄清楚:组件创建阶段做什么,窗口在哪里管理,首个页面由哪段代码加载。

这是 HarmonyOS 7.0 学习笔记第 03 篇。我的练习方法是先读当前模板,再在已有回调里增加少量日志,同时观察设备画面。冷启动、恢复和窗口重建可能涉及不同路径,具体结果需要实测记录。

日志出现只能证明执行到该位置,不能直接证明页面绘制或异步数据加载完成。

环境项本次实际记录
DevEco Studio 版本待填写
HarmonyOS SDK/API待填写
目标设备与系统版本待填写
观察对象当前模板的 EntryAbility.ets、页面入口和日志窗口

本文图片为职责与操作方法示意图,不预先填写本机日志和运行结果。

一、用四个角色建立职责地图

我会先区分 AbilityStage、UIAbility、WindowStage 和页面组件的作用,再查看它们在本机模板中的具体位置。

Stage 模型的四个角色

角色入门时先理解的作用
AbilityStage与模块中代码首次加载相关的运行入口
UIAbility应用组件与对应生命周期;EntryAbility 通常是模板中的实现
WindowStage应用进程内的窗口管理对象,涉及主窗口管理
页面组件描述 UI 与交互,加载后呈现在窗口中

华为的Stage 模型说明介绍了 AbilityStage 与 HAP 的关联,以及 UIAbility 通过 WindowStage 持有主窗口的关系。本文用职责卡片帮助阅读,不把四个角色排列成固定的回调执行时间表。

二、先读当前模板的 EntryAbility

打开 EntryAbility.ets 后,先看继承关系和模板已有的回调,再记录方法名、参数与关键调用。

先读 EntryAbility.ets

我会记录三类信息:哪些方法已经重写、每个方法做了什么、页面加载调用位于哪个回调中。初次阅读先保留模板,避免整段覆盖入口文件。

阅读线索需要记录的内容
继承关系当前类继承的基类及已有导入
创建相关回调方法名、参数类型与已有初始化
窗口相关回调窗口对象、页面加载调用及错误处理

三、沿模板找到窗口与首个页面的联系

阅读时可以沿“组件创建相关逻辑—窗口创建相关逻辑—页面加载调用”寻找代码位置。这里表达的是阅读路径,实际回调现象仍以设备上的操作记录为准。

沿模板寻找页面加载位置

在常见 Stage 模板中,会在窗口创建相关回调中加载首个页面。官方窗口生命周期文档说明,UIAbility 通过 WindowStage 管理主窗口,主窗口是 ArkUI 的绘制区域。

下面只是阅读标记,不是可以覆盖工程文件的完整 ArkTS 代码:

EntryAbility 继承 UIAbility
  创建相关回调:查看已有的初始化工作
  窗口创建相关回调:寻找首个页面加载调用
  页面组件:查看实际 UI 与交互声明

具体导入、方法签名、参数类型和页面加载接口应按当前模板与 SDK 文档核对。

四、初始化位置先问三个问题

找到创建回调以后,我不会把所有初始化都集中放进去,而是先判断工作的归属、重复执行的后果和耗时。

初始化前先问三件事

问题与代码位置的关系
属于应用、模块、窗口还是页面?确认职责和对象生命周期
重建时会不会再次执行?判断是否需要安全的重复执行逻辑
是否耗时或影响首屏?避免把长任务直接堆在启动路径中

初学阶段先做轻量、可重复的实验。网络请求和数据库初始化留到后续对应章节,再结合具体生命周期与异常处理安排。

不要假设某个初始化回调永远只执行一次;先记录组件重建、窗口重建和页面显示各自的现象。

五、分清日志、画面和异步结果

日志、首屏呈现和数据任务完成是不同的观察信号,需要分别记录。

日志能证明什么?

一条“进入回调”的日志可以证明代码执行到了该位置,却不能替代设备画面或数据校验。页面已经出现时,后台任务仍可能继续;日志输出顺序也不足以推断全部 UI 行为。

我会分别记录入口回调、关键任务完成和设备画面的表现。这样看到“日志晚到”或“页面显示但数据没加载”时,能更准确地描述现象。

六、在现有回调中添加少量日志

实际实验只在模板已有的创建相关回调和窗口相关回调中添加观察点。使用一个容易筛选的唯一标签,例如 YJlioStageDemo。

只在现有回调添加日志

下面给出日志内容示例。它们保持注释形式;实际插入时,先核对当前工程的 hilog 导入、domain、日志等级与参数用法:

// 在模板已有回调的方法体中,按当前SDK写法添加:
// hilog.info(DOMAIN, 'YJlioStageDemo', '%{public}s', 'Ability created');
// hilog.info(DOMAIN, 'YJlioStageDemo', '%{public}s', 'Window stage created');

本次不新增空生命周期方法,不修改页面路由,也不把注释当成已经编译验证的代码。先用少量日志建立最小观察点,再看结果是否支持自己的判断。

七、比较三种操作的实际现象

我的实验会分别观察首次启动、退出后重新启动和前后台切换,记录日志与设备状态。

比较不同操作的实际现象

  1. 保存工程当前状态,记录模板已有回调。
  2. 在已有回调方法体中添加少量日志。
  3. 构建并运行,分别观察日志窗口和设备画面。
  4. 退出后重新启动,再做前后台切换,记录每次操作。
  5. 实验结束后移除临时日志,再次构建检查。
操作实际日志实际画面设备状态
首次启动待填写待填写待填写
退出后重新启动待填写待填写待填写
前后台切换待填写待填写待填写

观察表必须来自实际操作,不预先填入固定的回调顺序或“启动成功”。

八、入口和日志问题怎么排查

出现问题时,先检查当前模块与启动路径,再处理过滤条件、模板差异或重复初始化。

启动与日志问题怎么排查

现象先检查什么
模板没有教程里的回调当前 SDK 生命周期文档,以及是否确实需要重写该阶段
日志没出现运行工程和模块、日志等级、标签拼写、当前启动路径
页面出现但日志稍晚分开记录画面、日志输出和异步任务,不混为同一事件
返回应用时初始化再次出现区分 Ability 创建、窗口创建和页面展示,再判断工作归属

一次只改一个观察点,保留完整日志和操作步骤。需要持久化或创建资源时,应考虑重复调用的影响;本篇先记录现象,不直接给后续业务初始化下结论。

学习总结

这篇从四个角色的职责出发,阅读模板入口并用日志观察启动路径。我的重点是保留模板、设置明确观察点,再把日志与设备画面分别记录。

完成实际操作后补齐工具版本、日志截图和观察表。下一篇学习 ArkTS 变量、基础类型与类型推导,用具体字段表达页面数据。

参考资料

  1. 华为开发者联盟:Stage 模型开发概述
  2. 华为开发者文档:窗口生命周期
  3. 华为开发者文档:UIAbilityContext

声明:本文为学习方法与模板阅读笔记,配图为示意信息图;生命周期、参数和运行现象以当前模板、实际设备与官方文档为准。

分隔线

返回顶部

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐